3

我有一个带有两个分支的 git 存储库:masterlive. 我工作master。一旦我认为我的更改已准备好投入生产,我会将它们合并到live中,并在生产系统中签出。我一个人在这个项目上工作。

使用这种设置,live过去总是只是在master. 因此,当我执行git merge masteronlive时,合并将通过fast-forward.

截至最近,执行git merge masterwhile onlive会导致该recursive策略执行合并。我不知道这是不是因为我曾经不小心先在 上进行了更改live,然后才将其合并到master.

git diff master live不产生任何输出,即。这两个分支具有相同的文件内容。

我该怎么做才能让我的 git 存储库进入“干净”状态,以便它在fast-forward默认情况下再次使用该策略?

4

1 回答 1

2

我认为问题是由于:

  1. 我不小心Alive而不是master.
  2. 然后我Bmaster.
  3. 我意识到我犯了错误 1. 并合并livemaster.
  4. 我仍然需要合并Blive,所以我合并masterlive

我认为这造成了提交路径的“交叉”,使得无法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

现在我可以再次快进。请注意,这可能很危险,并且在共享存储库时可能不应该这样做

于 2015-02-27T16:43:17.147 回答