在单个谱系中重定多个分支基址的最简单方法



>我有两个分支,我把它放在上游/主节点之上。一个分支将另一个分支作为祖先,因此它们形成一条线。

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'>

这只涉及一次变基,但移动分支既乏味又容易出错。

我研究了变基--保留-合并,但这似乎不适用,因为没有合并提交。

有没有更好的方法来完成变基?

避免合并冲突的一种方法是将分支从变基前的历史记录移动到变基后的历史记录。诚然,这很糟糕,因为它需要找出每个提交的新版本,但可能比不必要地合并更快。

例如。

git 变基上游/主功能

U1 -- U2 (upstream/master)
        
         A' -- B' 
                 
                  C' -- D' (features)

git 分支 -f 修复 (SHA 代表 B') # 更改分支指向的位置。

U1 -- U2 (upstream/master)
        
         A' -- B' (fixes)
                 
                  C' -- D' (features)

从 git 2.38 开始,我们现在可以使用 --update-refs 标志变基。

要全局启用此功能,请执行以下操作:

git config --global rebase.updateRefs true

最新更新