繁体   English   中英

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

[英]Undoing a git rebase --skip - reapply a commit during a rebase

我正在做一个很长的git rebase ,有很多提交。 我不小心--skipped了一个提交,其中有一些我解决的冲突。 我应该做git rebase --continue

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

我看到的一种方法是

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

或者我可以在处于变基阶段时进行 cherry-pick 吗?

我发现了一种“为我工作”的方式:

在rebase期间, .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 它奏效了。

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

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

  2. 在HEAD文件中找到SHA

    3c8c ... 2260dc ...全名{my.email@email.com} 1471276956 -0600提交:保存审判1,2,3

  3. 输入(注意类型足够sha,所以git知道要拉哪个):

    git checkout -b recovery 2260d ...

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

对我来说,我在.git/REBASE_HEAD中找到了 rebase hash 并复制了 hash。然后在我执行git rebase --skip的分支中,我执行了git merge {copied hash} 它奏效了!

现有的答案很好,但我找到了一种更快的方法来恢复我刚刚重新设置跳过/“丢失”的单个提交:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM