[linux小水滴]git命令


注意:文中类似< n >这种符号,使用命令时忽略<>

1 git diff

查找待提交代码被修改了哪里

$ git diff #查找所有待提交文件的修改处
$ git diff <文件路径>/<文件名> #查找具体<文件名>文件被修改了哪里
$ git diff --stat #查看文件被修改的行数,如下
$ git diff --numstat #查看文件被修改的行数,只显示行数
di.di@ubuntu:~/source_code/bsp/kernel/kernel4.14$ git diff --stat
 arch/arm64/boot/dts/sprd/ums9620-mach.dtsi |  3 ++-
 drivers/thermal/power_allocator.c          | 21 +++++++++++++++++++--
 drivers/thermal/thermal_sysfs.c            |  2 ++
 include/linux/thermal.h                    |  1 +
 4 files changed, 24 insertions(+), 3 deletions(-)

2 修改commit的编辑器为vim的方法

方法一
在 ~/.gitconfig中修改如下:添加下面两行

$[core]
$	editor = vim

方法二
用如下命令:

$ git config editor vim

3 git reflog

查看所有分支最近n次操作记录

$ git reflog -<n>
$ git reflog #可以查看所有分支的所有操作记录

4 git log

查看最近几次commit的第一行

$ git log -6 --pretty=oneline #查看最近6次提交的第一行
$ git log --auther=didi #查看作者为didi的所有提交
$ git log -p -<n> #查看最近n次提交以及提交的与原版本的不同之处,相当于git log -1和git diff的结合 

5 git reset

reset到某一笔提交,两种方法:
一、hard

$ git reset --hard <commitID> #reset到指定提交,此时待提交会被彻底清除,恢复到commitID那笔提交的状态
$ git reset --hard HEAD~<n> #reset到前n次提交
$ hit reset --hard^ #reset到上一次提交

二、soft

$ git reset --soft HEAD^ #reset到上一次提交
$ git reset --soft <commitID> #reset到指定提交,此时待提交仍然保留,如果还要提交,直接commit即可

参考链接

6 git checkout – <文件名>

就是让这个文件回到最近一次git commit或git add时的状态

$ git checkout -- <filename>

详细请参考下面两个链接:
《Git 基础再学习之:git checkout – file》这篇文章给出了三种使用情景。
廖雪峰老师的git教程中,对git chekout – 做了详细介绍。

7 git blame

追踪提交记录:查找某个文件的某行代码是谁提交的
下面查找文件test.c的第671行是谁提交的

$ git blame -L 671 drivers/msic/test/test.c

查看某个文件是谁提交的

$ git blame drivers/msic/test/test.c

8 git branch

$ git branch #查看当前代码分支
$ git branch -a #查看所有分支

9 git format-patch

在我们git push代码到主线分支后,想要保存这一笔提交(包括修改的内容、修改的位置、commit message等信息),就可以用git format-patch命令生成patch文件。之后,在代码移植时可以直接打上该patch,也可以提供他人参考使用,这样效率会比较高,避免手动修改带来的错误。
下面是git format-patch的简单用法:
git format-patch 将commit ID对应的提交打包(包含这个commit ID的所有关联提交),比如:

di.di@ubuntu:~/source_code/r_trunk/bsp/kernel/kernel4.14$ git format-patch e5fxxxxxxxxxxxxxxxxxxxxxxxxx353
0001-Bug-1234567-arm64-dts-add-integrals_clear-property.patch
0002-Bug-1234567-thermal-add-a-new-variable-clear_integra.patch

我们看到生成了两笔patch。
<patch编号>-Bug-<bug号>-<commit message关键信息>.patch
生成的patch类型的文件最好用vim打开,可以看到修改的内容、修改的位置、commit message等信息,其实显示的信息就是git diff显示的内容+commit message。
如果只想要只打包commit id对应的最近1笔提交,加-1。n笔就是-n。比如:

di.di@ubuntu:~/source_code/r_trunk/bsp/kernel/kernel4.14$ git format-patch -1 e5fxxxxxxxxxxxxxxxxxxxxxxxxx353
0001-Bug-1234567-arm64-dts-add-integrals_clear-property.patch
di.di@ubuntu:~/source_code/sprdroidr_trunk_u01/bsp/kernel/kernel4.14$ ls
0001-Bug-1234567-thermal-add-a-new-variable-clear_integra.patch  build.config.goldfish.arm     kunitconfig
COPYING                                                          build.config.goldfish.arm64   lib
CREDITS                                                          build.config.goldfish.mips    mm

如果想要删除patch,rm 0001-Bug-1618112-arm64-dts-add-integrals_clear-property.patch即可。
注意!!在生成patch之间最好用git log确认commit ID是你想要的那一个
更多git format-patch的用法请参考:参考链接

10 git diff进阶

用git diff生成patch

di.di@ubuntu:~/source_code/android/bsp/kernel/kernel5.4$ git diff > 文件名.patch
di.di@ubuntu:~/source_code/android/bsp/kernel/kernel5.4$ git diff > 文件名.diff

关于git format-patch和git diff的使用建议:
推荐使用git format-patch,因为它可以保存更多信息,更包括commit message和owner信息,git diff在代码未commit的情况下用来简单地保存修改还是很方便的。
git format-patch和git diff的区别请参考:参考链接1 参考链接2

11 git checkout

假如最近一次提交commit ID aaaaaaa(已经push过的)。当更新了本地代码后,查看git log就会发现最近的一笔提交记录commit ID已经不是aaaaaaa,而是ccccccc,这也就意味着分支已经被切换。此时想在aaaaaaa的基础上继续提交,用git checkout就可以轻松解决。

di.di@ubuntu:~/source_code/android/bsp/kernel/kernel5.4$ git checkout <想要切换到的commit ID>

随后再有提交就可以 --amend 继续提交了。

12 git pull

git clone到本地的代码,可以通过git pull直接将代码更新到最新,前提是需要reset到origin分支

13 git am冲突解决

git am <commit id> 因为有冲突提交失败了应该怎么办?步骤如下:(跟cherry-pick时解冲突的思路一致)
(1)git am <commit id>提示提交失败
(2)git am --abort
(3)git am --reject <commit id>
(4)在patch相关文件的路径下,与该文件紧挨着会生成一个.rej文件。比如修改的文件是test.c,那么生成的reject文件是test.c.rej
(5)解冲突。打开test.c.rej文件,根据文件中指示,在test.c中修改冲突的地方,保存
(6)删除test.c.rej
(7)git diff检查下冲突的地方是否保存成功,没成功重新解冲突;保存成功继续往下
(8)git add test.c
(9)git am --continue
(10)git commit --amend,sign off把自己加上,表明不管作者是谁这笔patch是你打的
(11)git push https://android.googlesource.com/kernel/common HEAD:refs/for/android13-5.15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值