1

我试图了解导致 git 在切换到开发分支后将我正在处理的功能分支合并到主开发分支的情况。

我能够恢复合并,但花了一天的大部分时间才能完全解决,我想在将来避免它。

这是工作流程:

在我的功能分支上工作后,我需要修复错误。我的功能分支 (refs/heads/feature/uploader/90) 与主开发分支保持同步:

git merge origin/develop

然后我需要切换到开发分支:

git checkout develop

git输出:

切换到分支 'develop' 你的分支落后于 'origin/develop' 88 次提交,并且可以快进。

然后当我发出拉动时:

git pull origin refs/heads/develop

出于某种原因,看起来 git 决定将我的功能分支合并到开发中,输出如下所示:

branch develop -> FETCH_HEAD
Fast-forwarding to: 102301bcc51fc6d7978e5287df9d031d82e53bc9
Trying simple merge with d139bab0a96df01408f82110e38b6e0b6b98e6e6
Merge made by the 'octopus' strategy.

我的提交日志显示我正在提交: Merge branch 'feature/uploader/90' and 'develop' of github.com:MakerStudios/dashboard into develop

4

1 回答 1

2

这就是所谓的快进合并

每当您进行合并时(默认情况下)都会发生这种情况,其中您所在的分支中的所有更改都已经存在于您尝试合并的分支中。

因此,由于在您上面的示例中refs/heads/feature/uploader/90已经包含所有更改refs/heads/develop,而不是创建真正的合并提交,git只需移动 refdevelop以指向与feature/uploader/90.

git merge --no-ff您可以通过执行不会快进或将merge.ff属性更改为来避免这种行为false

撤消不需要的快进合并并不像您想象的那么困难:只是git reset --hard到合并中的内容之前的最后一次提交。

于 2013-01-10T19:52:51.963 回答