[英]Undoing a git rebase --skip - reapply a commit during a rebase
我正在做一个很长的git rebase
,有很多提交。 我不小心--skipped
了一个提交,其中有一些我解决的冲突。 我应该做git rebase --continue
。
有没有办法在此变基阶段重新应用先前的提交,然后继续变基?
我看到的一种方法是
或者我可以在处于变基阶段时进行 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很棒,因为它可以保存基本上你提交的所有内容的日志。
在“ .git / logs / HEAD ”中找到您的提交,然后在文本编辑器中打开
在HEAD文件中找到SHA
3c8c ... 2260dc ...全名{my.email@email.com} 1471276956 -0600提交:保存审判1,2,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}
。 它奏效了!
现有的答案很好,但我找到了一种更快的方法来恢复我刚刚重新设置跳过/“丢失”的单个提交:
git cherry-pick -x <commit-hash>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.