一、git常用功能
1.提交代码
git pull //下拉代码并合并到本地
git add . //提交修改(增加或者修改的文件)到本地缓存
//git add ./acc/ac.c //提交指定文件
git commit -m "备注" //提交修改备注到本地缓存
git push //将修改文件及备注一起提交到远程服务器
2.查看特定目录或文件的修改记录
#查看某个文件的修改历史及diff,eg:git log -p ./test.cpp
git log -p 文件名
#查看某个人提交的记录eg:git log --author="lilei"
git log –author=
#根据过滤条件grep查看提交记录
git log –grep=
3.重置到某次提交
git reset --hard 4474d21faa7ef83e31a9170e4bd //重置到某次提交
修改git远程仓库地址:
git remote set-url origin [email protected]:/repo/test.git
4.切换某个分支
~$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/bcc_test
~$ git checkout bcc_test
Branch 'bcc_test ' set up to track remote branch 'bcc_test ' from 'origin'.
Switched to a new branch 'bcc_test '
~$
5.合并分支
合并有两种方式:
5.1 、需要将某一个分支的所有代码变动,那么就采用合并(git merge)
待补充…
5.2、只需要某一个分支的部分代码变动(某几个提交),这时可以采用 cherry- pick
5.2.1 cherry-pick 的名称翻译:精心挑选,挑选一个我们需要的 commit 进行操作。它可以将某个分支上的 commit ,移植到当前的分支。
命令格式
git cherry-pick <commit哈希值>
git cherry-pick <分支名称-feature>
将feature分支的最近一次提交,合并到当前分支。
5.2.2 cherry-pick一次转移一次提交
比如下面图谱:两个分支 master 和 feature
a - b - c - d Master
\
e - fx - g Feature
将提交 fx 应用到master分支:
# 切换到 master 分支
$ git checkout master
# Cherry pick 操作
$ git cherry-pick fx
操作后的图谱如下(master分支的末尾增加了一个提交fx)
a - b - c - d - fx Master
\
e - fx - g Feature
将合并后的主分支提交到远程仓库:
$ git push -u origin master
6 查看git远程地址
git remote -v
7 新建分支
1.创建本地分支
方法1.基本方式:使用git branch命令新建分支,并使用git checkout命令切换到该分支。
具体步骤如下:
$ git branch <branch-name> # 新建分支
$ git checkout <branch-name> # 切换到新建的分支
方法2.简化方式:使用git checkout命令的-b选项直接新建并切换到分支,省略了上面两个步骤。
具体步骤如下:
$ git checkout -b <branch-name> # 新建并切换到新分支
2.推送到远程仓库
git push -u origin <branch-name> 远程上的分支更新成功 # 本地新建的分支(<branch-name>)推送到远程仓库
3.删除远程分支
git push <branch-name> --delete feature-branch # 删除远程分支(名称 <branch-name>)
8.获取某次 commit的某个文件
git checkout a1b2c3d -- src/prot/text.c
这会将text.c文件在commit a1b2c3d的状态检出到工作目录中。如果你想要将文件检出到另一个位置,可以指定完整的文件路径:
git checkout a1b2c3d -- src/prot/text.c > /data/tmp/text.c
9. 查看所有分支日志
要查看Git仓库的所有分支的日志,命令示例:
git log --all --oneline --graph --decorate
这个命令会显示所有分支的提交历史,并且以简洁的一行形式(每个提交只显示一行),同时包含图形表示和各种附加信息(比如分支和标签名称)。
这里是命令的参数解释:
–all 表示显示所有分支的提交。
–oneline 表示将每个提交压缩到一行。
–graph 表示显示ASCII图形表示的分支合并历史。
–decorate 表示显示分支和标签信息。
附1:
1.报错:git:fatal:Unable to create".git/index.lock",则删除rm .git/index.lock即可
2.查看修改日志
~$ git log //日志-摘要
~$ git log --stat //日志-显示提交修改的文件
3.修改本工程的用户名和email(提交的日志将显示自己的用户信息)
~$ git config user.name lilei
~$ git config user.email [email protected]
4.修改本用户下的全局的用户名和email
~$ git config --global user.name testuser
~$ git config --global user.email [email protected]
附2
1.比较两次提交修改点
1).查看提交日志
~# git log --stat
commit 7f6cb263d550c0ee3fc6f8132db77f22c04b2f5c
Author: xx_liu <[email protected]>
Date: Mon Aug 1 09:56:43 2022 +0800
ddlaunch 280
test/cLauncher | Bin 29185820 -> 38829268 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
commit dbbafd6b070a7e26ce135d0e013d8cd00e67fcd1
Author: menmen_li <[email protected]>
Date: Fri Jul 29 18:28:39 2022 +0800
sn code fix
test/board_r.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
...
2).查看两次提交的差异
命令:git diff old_commit_id new_commit_id
说明:new_commit_id 比 old_commit_id 提交的内容增加或者减少了什么。
~# git diff dbbafd6b070a7e26ce135d0e013d8cd00e67fcd1 7f6cb263d550c0ee3fc6f8132db77f22c04b2f5> ./log_diff/commit_diff.log
附3
代码回退到指定分支点指定commit
1.拉取指定分支
1)获取指定分支:git clone [git-url] -b [branch-name]
2)获取master主分支代码:git clone usrname@url
这里已获取主分支代码为例
linux$ git clone [email protected]:/com/gitserver/test.git
2.查看日志看commit, 并退回到指定commit
linux$ git log
commit 2b9804bb693ca8e80e8e2eaf65ce7856e3515725
Author: mali <[email protected]>
Date: Mon May 16 10:57:14 2022 +0800
test commit 002
commit bf2850652a2883025e55525563ec7c18fed2ec8c
Author: li <[email protected]>
Date: Mon May 16 10:52:31 2022 +0800
test commit 001
commit c5bef1dbb887db603a2523b8863c115103b922be
Author: li <[email protected]>
Date: Mon May 16 00:52:31 2022 +0800
test commit 000
:
linux$ git reset --hard bf2850652a2883025e55525563ec7c18fed2ec8c
3.验证是否成功退回了
linux$ git log
commit bf2850652a2883025e55525563ec7c18fed2ec8c
Author: li <[email protected]>
Date: Mon May 16 10:52:31 2022 +0800
test commit 001
commit c5bef1dbb887db603a2523b8863c115103b922be
Author: li <[email protected]>
Date: Mon May 16 00:52:31 2022 +0800
test commit 000
:
从日志可以看到 已经看不到test 002的提交,已经退回到了001
附4 查看某次提交的commit的某个文件的修改内容
git show f5eaa821fa3b35246b6ee516a0e50882c10dbbe4 android/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
附5 查看某次commit修改的内容
格式 git show commit_id
git show cdf30f0dceac60a11167d3dd7eef058c21b7cf84
附6 查看本地修改
~# git status
test@Server-5820-Tower-X-Series:~/hero/mtk/8768_android11$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: build/make/core/Makefile
deleted: vendor/xxx/prebuild/car/View/lib/armeabi-v7a/libmarsxlog.so
modified: vendor/xxx/products/products_test.mk
Untracked files:
(use "git add <file>..." to include in what will be committed)
build/make/core/test.sh
说明:Untracked files 表示没有加入版本库的 文件,需要用git add 添加到版本库
附7 撤销commit
1.git rebase -i commit_id
2.再弹出vi编辑器修改需要撤销的commit,如下
编辑器,并显示一个类似于下面的文本:
pick abc123 commit message
pick def456 another commit message
pick ghi789 yet another commit message
需要撤销的commit的pick 单词 改成 drop
3.wq退出vi编辑器
4.同步到远程:git push --force 远程地址