我有分支
B1 --c01--c02--c03--c04
B2 --c11--c12--c13--c14
我用B1重新分配B2分支
B2 --c01--c02--c03--c04--c11--c12--c13--c14
两个分支机构正在同步发展,现在B1发生了巨大的变化,必须重新投入B2
所以,我需要删除所有旧--c01--c02--c03--c04
并用新数据替换它们!!
有人可以帮我怎么做吗?
答案 0 :(得分:1)
通常,历史不应该改变。改变历史使合作变得更加复杂,而且应该如此。
但鉴于历史记录已经发生变化,并且您希望在重写的分支上重放一堆提交,您可以将git rebase
与--onto
选项一起使用:
git rebase --onto new-c04 old-c04 B2
# or: git rebase --onto new-c04 c11^ B2
上述命令将在old-c04
(不包括)和B2
分支(包括)的提示之间进行所有提交,并将它们重播到提交new-c04
。它还会将B2
分支指针移动到新历史记录的新提示(包括您的提交)。
您可能需要查看补丁排队系统,例如guilt或TopGit。
答案 1 :(得分:0)
如果您以与遥控器不一致的方式在本地修改了B2,则可以执行许多操作。一种方法是:
git checkout B2 # make sure
git branch broken # create a branch to remember this point
git reset --hard @{u} # reset everything on B2 back to the position on the remote head
git pull --rebase # B2 will now be as the remote
我假设当你说--c01 - c02 - c03 - c04需要替换来自远程仓库的其他提交。那么剩下的B2就是将c11 - c12 - c13 - c14重播回分支。你可以挑选或改变这些变化:
git rev-list broken~4..broken | git cherry-pick --stdin
如果是远程分支,也需要重置B1。