我有两个分支,我保持在上游/主人之上。一个分支将另一个分支作为祖先,因此它们形成一条线。
U1 (upstream/master)
\
A -- B (fixes)
\
C -- D (features)
后来,上游/大师继续前进......
U1 -- U2 (upstream/master)
\
A -- B (fixes)
\
C -- D (features)
......我想在两个分支上重新定位。
U1 -- U2 (upstream/master)
\
A' -- B' (fixes)
\
C' -- D' (features)
我知道两种方法,每种方法都有缺点。
git rebase upstream/master fixes
git rebase fixes features
这两个命令有时会起作用,有时会在第二个命令上给我合并冲突。
git rebase upstream/master features
# figure out the hash code of the new commit corresponding with B'
git branch -f fixes <sha of B'>
这只涉及一个rebase,但移动分支是繁琐且容易出错的。
我查看了rebase --preserve-merges,但这看起来并不合适,因为没有合并提交。
有没有更好的方法来完成rebase?
答案 0 :(得分:2)
避免合并冲突的一种方法是将分支从pre-rebase历史移动到post rebase历史。这无疑是可怕的,因为它需要搞清楚每个提交的新版本,但可能比不必要地合并更快。
例如
git rebase upstream / master features
U1 -- U2 (upstream/master)
\
A' -- B'
\
C' -- D' (features)
git branch -f fixes(B&#39; SHA)#更改分支指向的位置。
U1 -- U2 (upstream/master)
\
A' -- B' (fixes)
\
C' -- D' (features)