我不小心将一些更改(提交C)更改为master
而不是分支。后来我根据这些变化创建了其他分支(branch1
和branch2
)。现在,我想从所有分支中删除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
答案 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
其中Dnew
和Lnew
分别是D
和L
的重定格版本。
免责声明:我没有测试过;请先在您的回购邮件副本上进行测试。