我想解决的问题是我想得到文件的差异,而不是带有冲突标记的文件。这是一个脚本,所以管道命令是最好的。我认为最好的方法是找出父母的沙子,然后用它们来获得差异,但如果有更直接的方式,请告诉我。
答案 0 :(得分:2)
冲突文件数据存储在索引中,可以使用git-ls-files
命令检索文件。索引中的每个条目都有一个" stage"值,在0-3之间,表示条目的类型:
发生冲突时,将删除文件的第0阶段条目,并在适当时写入第1,2和3阶段,以指示文件存在冲突。解决冲突并git add
相应的分辨率后,将添加阶段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-files
冲突的阶段:
% git ls-files --stage
100644 6041e76b484cbe25004efdf4e5faf3396d6f95a6 1 a.txt
100644 0b6a7cf8dc44738a17d322c315ded9265f38a3fa 2 a.txt
100644 67244df04c82140ad8e763a52daa670878b9d574 3 a.txt
如果您想要一种简单的方法来获取单个条目的哈希值,您可以使用git revision syntax来引用某个阶段的项目。要获取#34中冲突文件的哈希值,他们的"分支(合并):
% git rev-parse :3:a.txt
67244df04c82140ad8e763a52daa670878b9d574
手动合并文件后,我可以使用git add
:
% echo "resolved!" > a.txt
% git add a.txt
只剩下第0阶段的条目:
% git ls-files --stage a.txt
100644 8a1c1b8cc46d9c722630b3bf561ecde155554831 0 a.txt