Git如何撤消最近的合并提交,然后更改为变基

时间:2018-10-17 02:39:23

标签: git

在远程和本地上的提交历史记录如下:

enter image description here

我弄错了,因此将“ b”和“ c”合并到“合并”点。我真正想做的是创造a-b-c之类的历史。我知道我应该使用rebase而不是merge,现在我已将合并结果推送到服务器。我想知道如何修改遥控器上的历史记录。谢谢!

2 个答案:

答案 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

这将导致远程分支具有线性历史记录。

如果您不能容忍重写远程分支的历史记录,那么您仍有一些选择。您可以还原合并提交,然后在此之上进行更多提交。但是,合并仍将是远程分支历史的一部分。尝试这样做可能没有任何意义。