git:从主分支中删除单个提交

时间:2012-10-09 09:26:08

标签: git branch commit

我不小心将一些更改(提交C)更改为master而不是分支。后来我根据这些变化创建了其他分支(branch1branch2)。现在,我想从所有分支中删除commit 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 

1 个答案:

答案 0 :(得分:1)

您必须重新绑定每个分支,因为每个提交都通过哈希引用整个父提交链。

您可以执行类似

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

git branch branch-C C

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

另外,如果你手工完成,你可以优化一下。 E.g。

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

其中DnewLnew分别是DL的重定格版本。

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