我想定义一个名为“ git diffn”的快捷方式,其行为如下:
git diffn := git diff HEAD HEAD~1
git diffn 1 := git diff HEAD~1 HEAD~2
git diffn 2 := git diff HEAD~2 HEAD~3
...
第一个没有问题,但我不知道如何制作其余部分。
我想定义一个名为“ git diffn”的快捷方式,其行为如下:
git diffn := git diff HEAD HEAD~1
git diffn 1 := git diff HEAD~1 HEAD~2
git diffn 2 := git diff HEAD~2 HEAD~3
...
关于这些命令:
git show
- 显示最后一次提交
git show HEAD~1
- 显示倒数第二次提交
git show <COMMIT SHA>
- 显示指定的任意一次提交
git whatchanged
- 显示哪些文件在git日志中发生了变化
[alias]
dn = "!sh -c 'if [ $# -eq 0 ] ; then git diff HEAD~1 HEAD ; else git diff HEAD~`expr $1 + 1` HEAD~$1 ; fi' -"
git dn
工作,以及
git dn 1
git dn 2
...
HEAD
被交换了,应该是:git diff HEAD~1 HEAD
等等。我之所以注意到这一点,是因为我自己也犯了同样的错误 :) - 13ren令我惊讶的是,您可以结合使用~n
和^
语法,这就是我做的方式:
a=1; git diff HEAD^~$a HEAD~$a
但有一种更简单的方法:
a=1; git log -p -1 HEAD~$a;
我发现额外的提交信息对定位很有帮助,但您可以自定义它。注意:手册中指出了这种方法与diff格式之间的一些细微差别,这可能对非人类消费者很重要。
[alias]
diffn = "!sh -c 'git log -p -1 HEAD~$1' -"
如果省略参数,它就无法工作,所以我猜需要一个if
语句来处理。
顺便说一下:在这里找到了类似的讨论here
alias gitdiffn='git show HEAD~$1'
,但我认为你已经知道如何将其变成 git 命令别名了。 - user11585592给了我想要的信息,但它并不等同于git diff HEAD2 HEAD~1的作用,因为我已经将git diff绑定到一个脚本上,当$DISPLAY可用时调用meld,否则调用普通的diff。 - abo-abo