为什么^!
会反转合并提交的差异?
来自Other ^ Parent Shorthand Notations
r1^!
表示法包含提交r1
但不包括其所有父项。 这个表示法本身表示单个提交r1
。
这正确地向我显示了非合并提交的差异。
$ git diff <commit>^!
但是对于合并提交,差异是相反的。
$ git diff <merge-commit>^!
我得到difftool
的类似结果。
为什么会这样?
答案 0 :(得分:1)
简短的回答是它是一个错误。
您可以使用git diff
查看git rev-parse
有效看到的内容。这里是应用于普通提交的^!
后缀:
$ git rev-parse 699d47e1d^!
699d47e1d2777ad1c2a867671e35daa821769f29
^4aaf5b0b21ac1fc294066593ac5243b3eaff897b
这里它适用于合并提交:
$ git rev-parse 117ddefdb^!
117ddefdb4dfd9b40ae60967a7327754d8ce7a87
^5e5a7cd9327cdbe6b50b5a0ead9b2ee5fb30789c
^699d47e1d2777ad1c2a867671e35daa821769f29
当您将压缩符号提供给git diff
时,Git会将其传递给git rev-parse
使用的相同扩展码。但是,git diff
不是打印出来,而是尝试反向解释结果。如果有两个提交哈希(带有各种标志),它会在两个命名提交之间运行差异。如果有三个或更多,它会做一些不同的事情。