18

我正在使用git-rerere它的预期目的,随着这些分支的发展逐渐记录两个分支(主分支和主题分支)之间的冲突解决方案,而不会创建不必要的合并提交。但是,即使在阅读了 git-rerere 联机帮助页之后,我也不清楚 rerere 何时实际记录了我的冲突解决方案。我检测和解决新合并冲突的标准工作流程是git merge master从主题分支开始,解决冲突,然后暂存所有文件并使用 提交合并git commit -m "Finished test merge",然后使用 撤消合并git reset --hard HEAD^,只留下由git-rerere.

然而,这似乎有点愚蠢。创建提交然后撤消它只是为了记录解决方案?阅读手册页后git-rerere,我仍然不清楚它何时记录我的决议。仅暂存冲突文件是否足够,或者我是否真的需要在解决冲突后创建合并提交,就像我一直在做的那样?

4

2 回答 2

15

从手册页:

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不带参数来记录提交。

于 2012-04-04T20:42:59.167 回答
1

仅暂存冲突文件是否足够

您必须确保在不留下冲突标记的情况下解决冲突。

请参阅提交 f427869提交 bc4caec(2018 年 8 月 28 日)由Thomas Gummerer(tgummerer
推荐人:Junio C Hamano ( gitster)
(由Junio C Hamano 合并 -- gitster--d88949d 提交中,2018 年 9 月 17 日)

请参阅Thomas Gummerer ( ) 的提交 b9b07ef(2018 年 8 月 28 日。 帮助者:Junio C Hamano ( )(由Junio C Hamano 合并——提交 4dd0c4a中,2018 年 9 月 17 日)tgummerer
gitster
gitster

.gitattributes:为相关文件添加冲突标记大小

某些文件git.git包含看起来像冲突标记的行,无论是在示例或测试中,还是在Documentation/gitk.txtasciidoc 标题的情况下。

冲突标记与实际内容的长度相同可能会让人类感到困惑,并且对于像 ' '这样的工具来说是不可能处理git rerere的。

通过将conflict-marker-size这些文件的 ' ' 属性设置为 32 来解决此问题,这使得冲突标记明确。

于 2018-09-22T21:02:14.677 回答