除了编写别名或脚本之外,是否有更短的命令来获取特定提交的差异?
git diff 15dc8^..15dc8
如果您只提供单个提交ID git diff 15dc8
,则会针对HEAD区分该提交.
使用git show $COMMIT
.它将向您显示提交的日志消息以及该特定提交的差异.
使用:
git diff 15dc8^!
如git-rev-parse(1)联机帮助页(或现代git gitrevisions(7)联机帮助页)的以下片段中所述:
另外两个简写用于命名由提交及其父提交形成的集合.r1 ^ @表示法表示r1的所有父项.R1 ^!包括提交r1但排除其所有父母.
这意味着你可以在git的任何地方使用15dc8^!
速记作为15dc8^..15dc8
需要修改的地方.对于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
获取提交的提交描述和差异.如果你只想要差异,你可以使用git diff-tree -p 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
有关详情,请参阅此页面.
正如@mipadi指出的那样,您可以使用git show $COMMIT
,但这也会显示一些标头和提交消息.如果你想要直的差异,请使用git show --pretty=format:%b $COMMIT
.
这显然不是一个很短的手,所以我在我的.gitconfig中保留了这个别名
[alias] sd = show --pretty=format:%b
这使我可以git sd $COMMIT
用来显示差异.
如果您使用zsh并设置了选项git diff 15dc8^!
,则许多提到的示例(例如,或git diff 15dc8^..15dc8
)不起作用extendedglob
.您可以通过以下三种方法之一修复它:
unsetopt extendedglob
(和/或从.zshrc中删除它)
setopt NO_NOMATCH
(和/或在.zshrc中设置)
每次用反斜杠逃脱插入符号,例如 git diff 15dc8\^\!