我开始在branchB工作。该分支是从branchA分支中分支出来的。几周后,主线分支develop已经合并了许多提交。分支A和B都落后了很多。
--d1--d2--d3 ...2 weeks later... --d253 develop
\
a1--a2--a3 branchA
\
b1--b2--b3 branchB (current)
我希望跟进develop分支的最新进展,并且选择以其最新提交d253为基础重建我的分支B。同时,分支A中的所有提交都应该忽略。这样可以避免我在解决合并冲突时花费大量精力(冲突很多),因为我不是分支A的维护者。我可以在我的分支B中重新创建我需要从A中获取的依赖项。不确定是否应该在rebase之前还是之后进行。
--d1--d2--d3 ..... --d253 develop
\ \
a1--a2--a3 \
\
b1'--b2'--b3'
Q1. 是否正确执行
git checkout develop
git pull
git checkout branchB
git rebase --onto develop branchA
Q2. 假设冲突数量很重要,大约有30个文件。与git merge develop
相比,rebase仍然是一个好的方法吗?
rebase
与merge
。当rebase
在追溯长时间提交的链时,我确实注意到了一些区别。当重新播放该文件到目标分支的历史记录上时,一个文件可能会有5个冲突。需要解决5次冲突。而使用合并,则有一个最终的合并冲突步骤,所有文件都显示在一个屏幕上(我使用IntelliJ)。每个有冲突的文件只需要解决一次。话虽如此,并不意味着merge
更好。我非常喜欢rebase
将我的更改放在目标之上,而不是合并提交。只是想更好地了解良好的实践。 - Polymerasea
基本开发线进行更改,反之亦然。根据您所说的情况,这并不适用。如果您决定继续(例如从a
中挑选所需内容),那么很可能会导致更多的合并冲突;因此,您必须决定是否值得这样做。 - Mark Adelsberger