我正在尝试了解导致git在切换到开发分支后将我正在处理的功能分支合并到主开发分支的情况。
我能够恢复合并,但是它花了一天的时间来完全解决,我希望将来能够避免它。
以下是工作流程:
在处理我的功能分支后,我需要处理错误修复。 我的功能分支(refs / heads / feature / uploader / 90)与主开发分支保持同步:
git merge origin/develop
然后我需要切换到开发分支:
git checkout develop
git输出:
切换到分支'develop' 您的分支机构是88个提交的“origin / develop”,可以快速转发。
然后当我发出拉动时:
git pull origin refs/heads/develop
由于某种原因,看起来git决定将我的功能分支合并到develop中,输出如下:
branch develop -> FETCH_HEAD
Fast-forwarding to: 102301bcc51fc6d7978e5287df9d031d82e53bc9
Trying simple merge with d139bab0a96df01408f82110e38b6e0b6b98e6e6
Merge made by the 'octopus' strategy.
我的提交日志显示我承诺: 将github.com:MakerStudios/dashboard的分支'feature / uploader / 90'和'develop'合并为开发
答案 0 :(得分:2)
这就是所谓的快进合并。
在您进行合并时(默认情况下),您所驻留的分支中的所有更改都已出现在您尝试合并的分支中。
因此,在上面的示例中refs/heads/feature/uploader/90
已经包含refs/heads/develop
中的所有更改,而不是创建真正的合并提交,git
只是将引用develop
移到了指向与feature/uploader/90
相同的提交。
您可以通过执行git merge --no-ff
来避免此行为,merge.ff
不会快进,也不会将false
属性更改为git reset --hard
。
撤消不需要的快进合并并不像你想象的那样困难:只需{{1}}到合并后出现的内容之前的最后一次提交。