Git 如何使用checkout命令重新创建冲突的文件状态?

Git 如何使用checkout命令重新创建冲突的文件状态?,git,merge,Git,Merge,我有长寿分支,不久前我解决了大的合并冲突。现在我想再次将master合并到我的分支中,但发生冲突。我有一点谷歌和发现的功能 但当我这样做的时候: git checkout --conflict=merge FileTheMergeConflictWas.ext 我什么也得不到 如何创建合并冲突解决文件并使用自动解决完成当前合并?如果您的合并已经提交,从某种意义上说已经太晚了。rerere代码的工作原理是在冲突发生时记录冲突,然后在解决冲突后(单独)记录冲突解决 冲突本身和您以前的解决方案都发生

我有长寿分支,不久前我解决了大的合并冲突。现在我想再次将
master
合并到我的分支中,但发生冲突。我有一点谷歌和发现的功能

但当我这样做的时候:

git checkout --conflict=merge FileTheMergeConflictWas.ext
我什么也得不到


如何创建合并冲突解决文件并使用自动解决完成当前合并?

如果您的合并已经提交,从某种意义上说已经太晚了。rerere代码的工作原理是在冲突发生时记录冲突,然后在解决冲突后(单独)记录冲突解决

冲突本身和您以前的解决方案都发生在过去,
git rere
未启用时。因此,要获得
git-rere
立即录制它们,您必须及时返回,启用
git-rere
,开始合并,获取冲突,解决冲突,然后返回到当前

如果你手边有时间机器,你可以用它。:-)我们大多数人都不这样做,但幸运的是,Git是一台时间机器!嗯,有点

只需打开
gitrere
,然后使用历史记录检查正确的提交。这将为您提供一个“分离的头”,其中
HEAD
指向您刚刚签出的提交。哪个提交是正确的?当然,就是上次合并之前的那个。这是现有合并提交的第一个父级

然后,现在您有一个分离的头部,并且处于正确的提交状态,执行合并,这将产生冲突:

git merge <hash-id>
你现在准备好出发了

小烦恼

如果您当前处于冲突的合并或ReBASE的中间,则现在必须中止它,然后使用Git时间机器返回并重新合并,然后重新启动冲突的合并或重新建立。(如果您已经完成了大量有用的工作,您可能希望先保存它,然后在某个地方提交它和/或根据需要创建一个指向当前提交的分支或标记名,然后再中止。)

如果您的合并已经提交,从某种意义上说已经太晚了。rerere代码的工作原理是在冲突发生时记录冲突,然后在解决冲突后(单独)记录冲突解决

冲突本身和您以前的解决方案都发生在过去,
git rere
未启用时。因此,要获得
git-rere
立即录制它们,您必须及时返回,启用
git-rere
,开始合并,获取冲突,解决冲突,然后返回到当前

如果你手边有时间机器,你可以用它。:-)我们大多数人都不这样做,但幸运的是,Git是一台时间机器!嗯,有点

只需打开
gitrere
,然后使用历史记录检查正确的提交。这将为您提供一个“分离的头”,其中
HEAD
指向您刚刚签出的提交。哪个提交是正确的?当然,就是上次合并之前的那个。这是现有合并提交的第一个父级

然后,现在您有一个分离的头部,并且处于正确的提交状态,执行合并,这将产生冲突:

git merge <hash-id>
你现在准备好出发了

小烦恼

如果您当前处于冲突的合并或ReBASE的中间,则现在必须中止它,然后使用Git时间机器返回并重新合并,然后重新启动冲突的合并或重新建立。(如果您完成了大量有用的工作,您可能希望首先保存它,只需在某个地方提交它和/或创建一个指向当前提交的分支或标记名(视需要和情况而定),然后才中止。)

感谢torek。我在分支机构中完成以下步骤:

git log --merges --oneline

30275e6 Merge branch 'master' into feature/5521_sign_cart_items
c28e258 Merge branch 'master' into feature/5521_sign_cart_items
f01e32c Merge branch 'master' into 5452_promocode
从第一行提取
30275e6

$ git show 30275e6
commit 30275e60ae49f0139d8a0537dd8dc215b7fa2908
Merge: e8d66f0 81249af
Author: Eugen Konkov <>
Date:   Tue Oct 25 19:57:16 2016 +0300

    Merge branch 'master' into feature/5521_sign_cart_items
现在我应该使用时间机器了(谢谢你torek):

这里有冲突。现在我应该像以前一样下决心了。这是我合并的结果
30275e6

git checkout 30275e6 FileTheMergeConflictWas.ext
git commit
在此之后,我切换回我的分支并合并
master

git checkout my_branch
git merge master

将使用保存的分辨率。祝你好运;-)

感谢torek。我在分支机构中完成以下步骤:

git log --merges --oneline

30275e6 Merge branch 'master' into feature/5521_sign_cart_items
c28e258 Merge branch 'master' into feature/5521_sign_cart_items
f01e32c Merge branch 'master' into 5452_promocode
从第一行提取
30275e6

$ git show 30275e6
commit 30275e60ae49f0139d8a0537dd8dc215b7fa2908
Merge: e8d66f0 81249af
Author: Eugen Konkov <>
Date:   Tue Oct 25 19:57:16 2016 +0300

    Merge branch 'master' into feature/5521_sign_cart_items
现在我应该使用时间机器了(谢谢你torek):

这里有冲突。现在我应该像以前一样下决心了。这是我合并的结果
30275e6

git checkout 30275e6 FileTheMergeConflictWas.ext
git commit
在此之后,我切换回我的分支并合并
master

git checkout my_branch
git merge master

将使用保存的分辨率。祝你好运;-)

希望合并如何解决?@TimBiegeleisen:
使用以前的解决方案
我想合并如何解决?@TimBiegeleisen:
使用以前的解决方案
我想它似乎缺少了
--from
这样的选项:
git checkout--conflict=merge--from FileTheMergeConflictWas.ext
。因此,
git
自动完成您刚才描述的所有操作。您不希望
git checkout--conflict
,因为这会合并到您当前的(索引)状态。似乎缺少了
--from
选项:
git checkout--conflict=merge--from文件themergeconflictwas.ext
。因此,
git
自动完成您刚才描述的所有操作。您不希望
git签出——冲突,因为这会合并到您当前的(索引)状态。