忘记了“ git rebase --continue”,并做了“ git commit”。怎么修?


112

我在git中修改代码,遇到一些合并冲突。我解决了冲突并做到了:

git add

在这一点上我忘了做:

git rebase --continue

我继续编码,并做了:

git commit

对于变化。现在,我"no branch"无法执行以下操作:

git rebase --continue 

我该如何解决?


#当前不在任何分支上。无需提交任何内容(干净的工作目录)
Abhilash

Answers:


5

编辑:以及下面的答案,看看是否这是一个更简单的解决方案。 https://stackoverflow.com/a/12163247/493106


我必须尝试一下,但是我认为这是我会做的:

  1. 标记您的最新提交(或在某处写下它的SHA1,以免丢失它): git tag temp
  2. git rebase --abort
  3. 再次进行变基。您将不得不再次解决合并。:(
  4. git rebase --continue
  5. git cherry-pick temp

问题在于您的temp提交可能同时包含合并的解析和新代码。所以这可能很棘手,但我会尝试一下,看看它是否有效。


您可以像@MatrixFrog这样标记,也可以将其另存为补丁。然后执行基准终止。检查状态以确保存储库处于您知道没有问题的状态,然后启动获取并重新设置基准。
yasouser 2011年

16
不要这样 有关更简单/更清洁的方法,请参见下面的kirikaza答案。不要搞砸樱桃,第二次解决冲突。
tandrewnichols 2013年

4
@Abhilash请接受kirikaza的回答。我(与tandrewnichols一样)做到了这一点,并且有一种更简单的方法(互联网似乎同意,因为答案是投票数的4倍)。
大卫·多里亚

现在的投票数是原来的10倍...此外,还可以使用git rerere来记住您的冲突解决方案(很有用,除非您有时做出不希望其记住的糟糕解决方案)。
Ajax

214

做吧git reset --soft HEAD^。它将HEAD指针移到其父级,但保留工作树并将合并更改添加到索引。因此,您可以git rebase --continue像以前一样继续进行基础调整。


1
这完全有效,也是我第一次发现--soft的用途。很高兴知道它是如何工作的,谢谢!
mmocny 2013年

1
希望人们能看到所有对此答案的支持,并按照这里的建议进行!
拉胡

1
这正是我的想法(但可能是偶然地通过了)。不确定在重新设置基准期间是否正在更新HEAD。感谢您的确认!很高兴我进一步滚动了一下,然后才解决了上面的头痛问题。
DeezCashews

我编辑了接受的答案以在此处放置链接-直到按照上面的说明操作后,我才看到此答案。
xaxxon

0

我遇到了同样的问题,更糟糕的是,我重新确定了三个提交,在解决了第二个提交的冲突之后,我“提交了”而不是“重新设置-继续”。

结果我有了这个git reflog

当我应用kirikaza的解决方案时,我只是还原了第三次提交,而不是第二次提交,这是有问题的。

如您所见,rebase开始是从remotes / origin / master分支中进行检出,然后应用我的三个提交,它们在reflog中显示为前三个操作(在检出之前)。

然后,如果您想从一个干净的基础上重新启动,那么在重新设置基础之前,您可以简单地将硬重置为哈希,就在进行重新设置操作的检出之前。就我而言(参见图片):

git reset --hard 859ed3c

然后,您可以开始一个新的git rebase


0

我重新设置了git的基础,修复了冲突,git添加了具有冲突的文件,并且(错误地)提交了该文件。

我尝试了给出的git reset --soft HEAD^git reset --hard解决方案,但都没有为我工作。

但是,git rebase --abort它确实起作用了:我带着干净的工作树回到了开始进行重新设置基准之前。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.