我有一个包含两个分支的git存储库:master
和live
。我在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
策略?
答案 0 :(得分:2)
我认为问题的原因是:
A
而不是live
意外犯了一些东西(让我们称之为master
)。B
上提交了其他内容(master
)。live
合并到master
。B
合并到live
,因此我将master
合并到live
。我认为这创造了一个"穿越"提交路径使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。