两个连续提交的Git差异快捷方式是什么?

5

我想定义一个名为“ 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
...

第一个没有问题,但我不知道如何制作其余部分。
3个回答

8

关于这些命令:

git show - 显示最后一次提交

git show HEAD~1 - 显示倒数第二次提交

git show <COMMIT SHA> - 显示指定的任意一次提交

git whatchanged - 显示哪些文件在git日志中发生了变化


谢谢这些命令。我以前没用过,但有些很有用。但这并没有回答我的问题,我的问题是如何制作一个简单的快捷方式。 - abo-abo
不,这正是你想要的。要创建一个别名,请在你的 .bashrc 中添加 alias gitdiffn='git show HEAD~$1',但我认为你已经知道如何将其变成 git 命令别名了。 - user1158559
虽然git show HEAD2给了我想要的信息,但它并不等同于git diff HEAD2 HEAD~1的作用,因为我已经将git diff绑定到一个脚本上,当$DISPLAY可用时调用meld,否则调用普通的diff。 - abo-abo
啊,抱歉,我误解了你的命令。你是正确的! - user1158559

5
我自己想通了。我已经在 ~/.gitconfig 中添加了这个怪物:
[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

0

令我惊讶的是,您可以结合使用~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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接