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

时间:2014-09-03 18:31:18

标签: git

查看brackets-git的源代码(Brackets的git扩展名),我看到^!(插入符号)在调用{{1}时附加到提交哈希}}。见GitCli.js, line 754

git diff

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

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

我知道$ git diff --no-ext-diff --no-color 1f9ea6e^! -- src/git/GitCli.js 会引用提交的父级。 ^做了什么?

1 个答案:

答案 0 :(得分:6)

commit^!是一个范围说明符,表示:此提交,但不包含其父项。 它等同于指定:commit ^parent1 ^parent2 ^parentN

对于diff这没有意义(你只能比较两棵树) 从测试开始,命令似乎显示父项的合并基础与最后一个父项之间的差异。我认为git(mis)解释类似于范围A...B的参数,这些参数将显示merge-base A BB之间的差异(git diff parent1...parent2将产生相同的差异)。不知道章鱼合并会发生什么。

我可能错了,这些只是我从使用存储库进行测试并查看git代码(builtin/diff.c)的假设。