在远程和本地上的提交历史记录如下:
我弄错了,因此将“ b”和“ c”合并到“合并”点。我真正想做的是创造a-b-c之类的历史。我知道我应该使用rebase而不是merge,现在我已将合并结果推送到服务器。我想知道如何修改遥控器上的历史记录。谢谢!
答案 0 :(得分:1)
根据需要创建具有历史记录的新分支rebase_instead_of_merge
:
git checkout <commit_hash_for_b> # checkout the last commit of branch 1
git branch rebase_instead_of_merge
git cherry-pick <commit_hash_for_c> # cherry-pick all commits of branch 2
覆盖远程分支origin/some-feature
,使其指向与新分支rebase_instead_of_merge
相同的提交。在执行此操作之前,请确认遥控器上的覆盖历史记录不会对其他任何人造成同步问题。
git push --force origin rebase_instead_of_merge:some-feature
答案 1 :(得分:0)
您可能应该不修改遥控器上的历史记录,尤其是当您自己之外的人正在使用此分支时。原因是,如果您重写历史记录,则在他人进行同步时可能会给其他人造成破坏。如果您想要线性a - b - c
的历史记录,那么这是您应该做的:
remote: -- a -- b
\
local: c
您可以在遥控器上重新建立本地分支:
git fetch origin
git checkout master
git rebase origin/master
这将使我们拥有以下内容:
remote: -- a -- b
\
local: c'
然后,您可以将本地分支快进到远程:
git push origin master
这将导致远程分支具有线性历史记录。
如果您不能容忍重写远程分支的历史记录,那么您仍有一些选择。您可以还原合并提交,然后在此之上进行更多提交。但是,合并仍将是远程分支历史的一部分。尝试这样做可能没有任何意义。