我正在使用git-rerere
用于其预期目的,在这些分支开发时逐步记录两个分支(主分支和主题分支)之间的冲突解决方案,而不会创建不必要的合并提交。然而,即使在阅读了git-rerere manpage后,我还不清楚rerere何时实际记录了我的冲突解决方案。我检测和解决新合并冲突的标准工作流是从主题分支执行git merge master
,解决冲突,然后暂存所有文件并使用git commit -m "Finished test merge"
提交合并,然后使用{撤消合并{1}},仅留下git reset --hard HEAD^
存储的录制分辨率。
然而,这似乎有点傻。创建一个提交,然后撤消它只是为了记录分辨率?在阅读git-rerere
的联机帮助页后,我仍然不清楚它何时记录我的决议。仅仅暂存冲突的文件是否足够,或者我是否真的需要在解决冲突之后创建合并提交,就像我一直在做的那样?
答案 0 :(得分:12)
从联系手册:
Running the git rerere command immediately after a conflicted automerge
records the conflicted working tree files, with the usual conflict
markers <<<<<<<, =======, and >>>>>>> in them. Later, after you are
done resolving the conflicts, running git rerere again will record the
resolved state of these files.
和
As a convenience measure, git merge automatically invokes git rerere
upon exiting with a failed automerge and git rerere records the hand
resolve when it is a new conflict, or reuses the earlier hand resolve
when it is not. git commit also invokes git rerere when committing a
merge result. What this means is that you do not have to do anything
special yourself (besides enabling the rerere.enabled config variable).
因此您不必提交和撤消提交。您可以在没有参数的情况下运行git rerere
来记录提交。
答案 1 :(得分:0)
仅暂存有冲突的文件就足够了
您必须确保解决冲突而不会留下冲突标记。
请参见commit f427869的commit bc4caec,Thomas Gummerer (tgummerer
)(2018年8月28日)。
建议者:Junio C Hamano (gitster
)。
(由Junio C Hamano -- gitster
--在commit d88949d中合并,2018年9月17日)
请参见commit b9b07ef的Thomas Gummerer (tgummerer
)(2018年8月28日)。
帮助者:Junio C Hamano (gitster
)。
(由Junio C Hamano -- gitster
--在commit 4dd0c4a中合并,2018年9月17日)
.gitattributes
:为相关文件添加冲突标记大小
git.git
中的某些文件包含行,这些示例在示例或测试中或在Documentation/gitk.txt
中由于asciidoc标题而看起来像冲突标记。具有与实际内容相同长度的冲突标记可能会使人类感到困惑,并且无法使用“
git rerere
”之类的工具。通过将这些文件的'
conflict-marker-size
'属性设置为32来解决此问题,这将使冲突标记明确。