0

我不小心将一些更改(提交 C)master而不是分支。branch1后来我根据这些变化(和)创建了其他分支branch2。现在我想C从所有分支中删除由提交引入的更改(并将其移至branch-C)。可能吗?

现在的情况:

A - B - C - D - - L - M - L - M master  
            |     \                     
            |       - N - O - P branch2                           
            \               
             - E - F - G        branch1 

期望的情况:

         - C                    branch-C 
        /
    A - B - D - - L - M - L - M master  
            |     \                     
            |       - N - O - P branch2                           
            \               
             - E - F - G        branch1 
4

1 回答 1

1

您必须对每个分支进行 rebase,因为每个提交都通过哈希引用整个父提交链。

你可以做类似的事情

for br in master branch1 branch2
do
  git rebase --onto B C "$br" 
done

git branch branch-C C

所写的循环只有在没有冲突的情况下才能无缝工作。一般来说,我建议手动执行它。

此外,如果您是手动操作,则可以进行一些优化。例如

git rebase --onto B D master
git rebase --onto Dnew D branch1
git rebase --onto Lnew L branch2

其中Dnew和分别是和Lnew的变基版本。DL

免责声明:我没有测试过;请先在您的回购副本上对其进行测试。

于 2012-10-09T09:37:55.763 回答