我做了很长时间git rebase
很多提交。我不小心--skipped
提交了一些我已经解决的冲突。我应该做git rebase --continue
。
是否有办法在此rebase阶段重新应用此前一次提交,然后继续rebase?
我看到的一种方式是
或者我可以在一个篮筐阶段做一个樱桃挑选吗?
答案 0 :(得分:27)
我找到了“为我工作”的方式:
在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
。它起作用了。
答案 1 :(得分:17)
Git很棒,因为它可以保存基本上你所提交的所有内容的日志。
在&#34; .git / logs / HEAD &#34;中找到您的提交内容并在文本编辑器中打开
在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