Git 在冲突合并状态下,如何获取父提交的sha?

Git 在冲突合并状态下,如何获取父提交的sha?,git,Git,我试图解决的问题是,我希望获得文件的差异,而不是带有冲突标记的文件。这是一个脚本,所以管道命令将是最好的。我认为最好的方法是找出父母的sha,然后使用他们来获得差异,但如果有更直接的方法,请告诉我。冲突文件数据存储在索引中,可以使用git ls files命令检索文件。索引中的每个条目都有一个0-3之间的“阶段”值,表示条目的类型: 0:索引中的正常项,即暂存的文件 1:冲突中的公共祖先文件 二:冲突中的"我们"一方;;头中存在的文件 3:冲突中的“他们”一方;要合并的分支中存在的文件 发生

我试图解决的问题是,我希望获得文件的差异,而不是带有冲突标记的文件。这是一个脚本,所以管道命令将是最好的。我认为最好的方法是找出父母的sha,然后使用他们来获得差异,但如果有更直接的方法,请告诉我。

冲突文件数据存储在索引中,可以使用
git ls files
命令检索文件。索引中的每个条目都有一个0-3之间的“阶段”值,表示条目的类型:

  • 0:索引中的正常项,即暂存的文件
  • 1:冲突中的公共祖先文件
  • 二:冲突中的"我们"一方;;头中存在的文件
  • 3:冲突中的“他们”一方;要合并的分支中存在的文件
发生冲突时,将删除文件的阶段0条目,并酌情写入阶段1、2和3,以指示文件存在冲突。当您解决了冲突并添加了相应的解决方案后,将添加阶段0条目并删除高级阶段条目

例如,如果我试图合并在
a.txt
上产生冲突的分支:

% git merge br
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
然后,您可以查看
a.txt
中涉及的文件的散列及其与
git ls文件冲突的阶段:

% git ls-files --stage
100644 6041e76b484cbe25004efdf4e5faf3396d6f95a6 1       a.txt
100644 0b6a7cf8dc44738a17d322c315ded9265f38a3fa 2       a.txt
100644 67244df04c82140ad8e763a52daa670878b9d574 3       a.txt
如果需要一种简单的方法来获取单个条目的哈希值,可以使用在某个阶段引用某个条目。要获取“其”分支(正在合并)中冲突文件的哈希值,请执行以下操作:

手动合并文件后,我可以使用
git add

% echo "resolved!" > a.txt
% git add a.txt
并且只有阶段0条目将保留:

% git ls-files --stage a.txt
100644 8a1c1b8cc46d9c722630b3bf561ecde155554831 0       a.txt

合并尚未发生,因此您仍然需要提交合并源。我记得,其他项目存储在
.git/MERGE\u HEAD
中。但是,也有一些语法技巧可以通过索引提取冲突文件:
:0:README
,等等。请参阅。谢谢!在1到3之间有差异。
% git ls-files --stage a.txt
100644 8a1c1b8cc46d9c722630b3bf561ecde155554831 0       a.txt