0

我有分支机构

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数据并用新数据替换它们!

谁能帮我怎么做?

4

2 回答 2

1

通常,历史不应该改变。不断变化的历史使合作变得比它可能而且应该变得更加复杂。

但是鉴于历史已经改变,并且您想在重写的分支之上重放一堆提交,您可以使用git rebase以下--onto选项:

git rebase --onto new-c04 old-c04 B2
# or: git rebase --onto new-c04 c11^ B2

上面的命令将获取old-c04(不包括)和分支尖端B2(包括)之间的所有提交,并将它们重播到 commit 上new-c04。它还将B2分支指针移动到新历史的新提示(包括您的提交)。

您可能想研究一个补丁队列系统,例如 guilt 或 TopGit。

于 2013-08-04T16:19:08.850 回答
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 是远程分支,也需要重置 B1。

于 2013-08-04T17:33:43.313 回答