避免在Git中进行递归合并

时间:2015-02-26 18:19:09

标签: git merge git-merge fast-forward

我有一个包含两个分支的git存储库:masterlive。我在master工作。一旦我认为我的更改已准备好进行生产,我会将它们合并到live中,并在生产系统中检出。我一个人在做这个项目。

通过此设置,live始终只用于master后面的一些提交。因此,当我在git merge master上执行live时,合并将通过fast-forward执行。

截至最近,在git merge master上执行live会导致recursive策略执行合并。我不知道造成这种情况的原因是我曾经偶然在live上提交了更改,之后才将其合并到master

git diff master live没有输出,即。这两个分支具有相同的文件内容。

我可以做些什么来将我的git存储库变成" clean"状态,所以它默认再次使用fast-forward策略?

1 个答案:

答案 0 :(得分:2)

我认为问题的原因是:

  1. 我在A而不是live意外犯了一些东西(让我们称之为master)。
  2. 然后我在B上提交了其他内容(master)。
  3. 我意识到我犯了错误1.并将live合并到master
  4. 我仍然需要将B合并到live,因此我将master合并到live
  5. 我认为这创造了一个"穿越"提交路径使git merge无法快进。

    解决方案是首先确保两个分支确实具有相同的内容:

    git diff master..live
    git cherry -v master live
    git cherry -v live master
    

    都没有结果。然后我将live改为指向与master完全相同的提交:

    git branch -f live ae5e70... # Hash of the commit pointed to by master
    git push --force origin live:live
    

    现在我可以再次前进。请注意this can be dangerous and should probably not be done when the repository is shared