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

Pat*_* B. 28 git git-rebase

我做了git rebase很多提交我做了很长时间.我不小心--skipped提交了一些我解决过的冲突.我应该做的git rebase --continue.

是否有办法在此rebase阶段重新应用此先前的提交,然后继续rebase?

我看到的一种方式是

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

或者我可以在一个篮板阶段做一个樱桃挑选?

Pat*_* B. 31

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

在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)
Run Code Online (Sandbox Code Playgroud)

Git似乎保留了作为上述文件跳过的提交.而对应于已经应用的提交的文件不再存在.我意外跳过的提交被称为0259,文件仍然存在.

这是我做的:

$ echo "0258" > .git/rebase-apply/next
Run Code Online (Sandbox Code Playgroud)

有了这个我告诉git当前第258次提交被处理(之前正确应用).然后我做了

$ git rebase --skip
Run Code Online (Sandbox Code Playgroud)

告诉git忘记这个,瞧,我可以再次处理跳过的提交,纠正冲突和--continue.它奏效了.

  • 对我来说,今天使用 git 2.20.1 时,目录是“.git/rebase-merge/”,我修改的文件是“git-rebase-todo”和“done”。我运行 git reset --hard &lt;hash-of-parent-of-skipped-commit&gt; 来清理工作目录,最后运行 git rebase -- continue 。 (2认同)

Cor*_*ell 26

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-reflog来查询提交历史,无需直接打开文件。 (3认同)
  • 我以为我的辛勤工作因我的错误而消失了,但不,你拯救了我的日子。谢谢你。 (3认同)
  • 惊人的!拯救了我的一天! (2认同)