当我发现自己时,这种情况并不少见:
- 需要处理下一个功能
- 在将最新工作整合到主分支之前
- 新工作需要来自前一个分支的代码
- 合并到主是南瓜。
发生这种情况时,合并是痛苦的。
场景:
git checkout develop
git checkout -b feature/A
git commit -am "A1"
git commit -am "A2"
git push // + start a pull request
//Before the pull request is finished
git checkout -b feature/B
git commit -am "B1"
// Pull request is accepted and merged as a squash
// Other pull requests
git fetch origin develop
git merge origin/develop
(conflicts)
现在:
feature/B
有A1
、A2
、B1
develop
有一个提交D1
,其中包含来自A1
和A2
的更改- 而 Git 无法知道
D1
是A1
+A2
- 它正确地将
feature/B
接触feature/A
更改的代码的地方标记为 冲突。
理想情况下,我希望能够:
- 没有冲突,从
develop
到feature/B
来自feature/A
和 - 如果更改来自另一个分支(或不是来自提交
A1
和A2
,则会发生冲突。
这可能吗?
所以你有
功能 A:
O---A1---A2
特征 B:
O---A1---A2--B1
然后在上游完成壁球,您需要获取更新:
git fetch
O---A1---A2--B1 <--featureB
--D1 <-- origin/develop
你尝试合并,
O---A1---A2---B1--XX Conflict
/
--D1---------/
您需要在 D1 上重定 B1 的基数,而不是合并
git rebase --onto origin/develop featureA featureB
会做的
O---A1---A2
--D1--B1