撤消 git rebase --skip - 在 rebase 期间重新应用提交

问题描述 投票:0回答:5

我正在做一个很长的

git rebase
,有很多提交。我不小心
--skipped
提交了一些我解决的冲突。我应该这样做
git rebase --continue

有没有办法在这个变基阶段重新应用之前的提交,然后继续变基?

我认为的一种方法是

  1. 通过在正确应用的最后一次提交上创建分支来停止变基
  2. 从之前跳过的提交开始重新启动变基。

或者我可以在 rebase 阶段进行挑选吗?

git git-rebase
5个回答
60
投票

Git 很棒,因为它基本上保存了您提交的所有内容的日志。

  1. 在“.git/logs/HEAD”中找到您的提交并在文本编辑器中打开

  2. 在 HEAD 文件中找到您的 SHA

    3c8c... 2260dc... 全名 {[email protected]} 1471276956 -0600 提交:保存试用版 1,2,3

  3. 键入(注意键入足够的 sha,以便 git 知道要拉取哪一个):

    git checkout -b 恢复 2260d...

请参阅参考链接:http://blog.screensteps.com/recovering-from-a-disastrous-git-rebase-mistake


48
投票

我找到了一种“对我有用”的方法:

在变基期间,

.git/rebase-apply
目录中发生了很多事情。其中有一个名为
next
的文件。
next
包含一个与也驻留在
.git/rebase-apply
中的文件相对应的数字。该文件包含有关当前正在处理的提交的信息。例如:

$ cat .git/rebase-apply/next
0260
$ less .git/rebase-apply/0260
<info about the commit which is currently processed (and has conflicts)

Git 似乎保留了上述文件中跳过的提交。而与已应用的提交相对应的文件不再存在。我不小心跳过的提交名为 0259,并且该文件仍然存在。

这就是我所做的:

$ echo "0258" > .git/rebase-apply/next

我告诉 git 目前第 258 个提交已处理(之前应用正确)。然后我就这么做了

$ git rebase --skip

告诉 git 忘记这个,瞧,我可以再次处理跳过的提交,纠正冲突,然后

--continue
。已经成功了。


1
投票

对我来说,我在

.git/REBASE_HEAD
中找到了变基哈希并复制了该哈希。然后在我做了
git rebase --skip
的分支,我做了
git merge {copied hash}
。它成功了!


0
投票

现有的答案很好,但我找到了一种更快的方法来恢复我刚刚 rebase-skipped/'lost' 的单个提交:

  1. 向上滚动刚刚进行提交的终端输出
  2. 复制提交哈希,
  3. 在新鲜的树枝上运行
    git cherry-pick -x <commit-hash>

0
投票

每当您搞乱提交并且想要返回到之前的工作状态时。永远记住执行这 3 个步骤。

  1. git reflog
  2. 从上述命令打印的日志中复制要返回的提交的哈希 ID。
  3. git重置--hard{过去的哈希ID}

就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.