在调用git diff时,提交哈希之后的插入符号(^!)是什么?

gil*_*ly3 6 git

通过查看括号-git的源代码(Brackets的git扩展),我看到^!(caret bang)在调用时被附加到提交哈希git diff.见GitCli.js,第754行:

function getDiffOfFileFromCommit(hash, file) {
    return git(["diff", "--no-ext-diff", "--no-color", hash + "^!", "--", file]);
}
Run Code Online (Sandbox Code Playgroud)

这将在命令行中转换为以下内容,使用相关文件作为示例:

$ git diff --no-ext-diff --no-color 1f9ea6e^! -- src/git/GitCli.js
Run Code Online (Sandbox Code Playgroud)

我知道这^将引用提交的父级.怎么^!办?

kni*_*ttl 6

commit^!是一个范围说明符,表示:此提交,但不包括其父项.它相当于指定:commit ^parent1 ^parent2 ^parentN.

对于diff,这没有意义(你只能比较两棵树)从测试命令看来,似乎显示了父项的合并基础和最后一个父项之间的差异.我想的git(MIS)解释类似范围的参数A...B,这将显示出之间的差异merge-base A BB(git diff parent1...parent2将产生相同的差异).不确定在章鱼合并的情况下会发生什么.

我可能错了,这些只是我从测试库中获取并查看git代码(builtin/diff.c)的假设.

  • @knittl:for 和普通的非合并提交 `A^!` 是 `A^..A`,对于 diff 相当于“`A^ A`”。 (2认同)