除了编写别名或脚本之外,是否还有更短的命令来获取特定提交的差异?

git diff 15dc8^..15dc8

如果你只给一个提交id git diff 15dc8,它就会对HEAD进行不同的提交。


当前回答

这使用别名,所以它不能准确地回答你的问题,但我发现这些对你想做的事情很有用……

alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"

alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"

其他回答

git diff 15dc8 15dce~1

~1表示“父母”,~2表示“祖父母”,等等。

使用git show $COMMIT。它将向您显示提交的日志消息,以及特定提交的差异。

如果你知道多久以前,你可以试试这样的方法:

# Current branch vs. parent
git diff HEAD^ HEAD

# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2

预先提交的工作原理是这样的:

# Parent of HEAD
git show HEAD^1

# Grandparent
git show HEAD^2

有很多方法可以指定提交:

# Great grandparent
git show HEAD~3

详情请参阅本页。

Use:

git diff 15dc8^!

如下面的Git -rev-parse(1)手册页(或者现代Git gitrevisions(7)手册页)片段所述:

命名由commit和its组成的集合的另外两个简写 父提交存在。r1^@表示r1的所有父结点。r1 ^ ! 包括提交r1,但不包括它的所有父类。

这意味着你可以使用15dc8^!作为15dc8^..15dc8在Git中任何需要修改的地方。对于diff命令,git diff 15dc8^..15dc8被理解为git diff 15dc8^ 15dc8,这意味着commit (15dc8^)和commit (15dc8)的父节点之间的差异。

注意:git-rev-parse(1)手册中的描述谈到了修订范围,它也需要用于合并提交,有多个父级。然后r1 ^ !是r1 -not r1^@,即。"r1 ^r1^1 ^r1^2…"


此外,你可以使用git show COMMIT来获取提交描述和提交的diff。如果你只想要diff,你可以使用git diff-tree -p COMMIT。

这使用别名,所以它不能准确地回答你的问题,但我发现这些对你想做的事情很有用……

alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"

alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"