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