【问题标题】:Fixing a messed up rebase merge commit修复一个混乱的 rebase 合并提交
【发布时间】:2020-10-16 15:33:27
【问题描述】:

我记得我做过一些事情,比如提交我的更改(在我的功能分支上)并与远程分支(不是主分支)合并。然后为了确保我的提交位于合并提交之上,我重新设置了最后两个提交并更改了顺序。我推动了这些变化,其他人也在此基础上做出了承诺。

现在,发生的事情是一些合并提交是用不同的提交 ID 挑选的,现在当我创建拉取请求时,它显示为我的。我可以理解这是因为相同的更改来自不同的提交 ID 在我的分支中,因此它显示为其他人创作的并且我提交了但更改没有显示在文件选项卡中,因为更改已经存在。

这是我的参考日志

HEAD@{12}: rebase -i (finish): returning to refs/heads/my_branch_name

NEW COMMIT ID HEAD@{14}: rebase -i (pick): Messed up merge commit

NEW COMMIT ID HEAD@{15}: rebase -i (pick): Messed up merge commit

NEW COMMIT ID HEAD@{16}: rebase -i (pick): Messed up merge commit

NEW COMMIT ID HEAD@{17}: rebase -i (pick): Messed up merge commit

添加了一些提交,但在此之后其他人和我以及这个分支被其他几个人使用。我不知道如何解决这个问题

我能想到的一个想法是恢复所有这些提交,但这将创建另外 4 个提交。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 当你在一系列包含一个或多个合并提交的提交上 rebase 一个分支时,你通常必须在 rebase 进行时重做合并。大多数时候,基于合并提交的 rebase 并不是您想要做的。

标签: git git-merge git-rebase git-reflog


【解决方案1】:

您需要做的第一件事是撤消已完成的操作,以便正确执行。你没有提到你正在使用哪个分支,所以我假设它是master

  1. 查看您的 reflog 并在您开始搞砸之前找到提交。
  2. 记下该提交的哈希值。
  3. 做:

git fetch origin master

git checkout -f master origin/master

要将“混乱”的主分支保存在新的分支名称下,请执行以下操作:

git branch messed-up-master

git push -u origin messed-up-master

既然已经保存了,继续修复如下:

git reset --hard HASH

其中 HASH 是您从 reflog 保存的哈希值。

git push -f

现在你回到了混乱之前的位置。然后努力找出正确的方法来做你想做的事。

【讨论】:

  • 谢谢!我已经编辑了这个问题。但是在重设到混乱之前的更改并强制推动它们之后,其他人在混乱的变基之后所做的提交将会丢失,不是吗?所以可能不得不对那些进行樱桃图片?
  • 其他提交是否在另一个分支上?如果是这样,您可以从那里挑选它们。如果没有,您可以通过创建一个新分支来保存它们。我将添加这些命令。
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 2016-07-02
  • 1970-01-01
  • 2010-12-16
  • 2018-01-24
  • 1970-01-01
  • 2011-03-15
  • 2017-03-25
相关资源
最近更新 更多