恢复 git 变基的一个补丁

Revert one patch of git rebase

我正处于一个有很多冲突的大型 rebase 中。

刚发现几个 git rebase --continue 之前我不小心删除了一个文件而不是另一个文件。

我如何返回 pacth 并修复此问题,然后重新应用补丁?

编辑:--abort 不是解决方案,因为我将不得不重新进行所有修补程序。我只想中止其中的一部分

git rebase --abort 并重做变基。

执行以下操作:

git rebase --abort

这将中止变基并使您的 HEAD 恢复到变基之前的状态。

我认为没有使用 git rebase 还原单个补丁的选项。请参阅 git rebase 文档中的可能选项。

git rebase --help
GIT-REBASE(1)                     Git Manual                     GIT-REBASE(1)

NAME
       git-rebase - Forward-port local commits to the updated upstream head

SYNOPSIS
       git rebase [-i | --interactive] [options] [--onto <newbase>]
               [<upstream>] [<branch>]
       git rebase [-i | --interactive] [options] --onto <newbase>
               --root [<branch>]
       git rebase --continue | --skip | --abort

   In case of conflict, git rebase will stop at the first problematic
   commit and leave conflict markers in the tree. You can use git diff to
   locate the markers (<<<<<<) and make edits to resolve the conflict. For
   each file you edit, you need to tell git that the conflict has been
   resolved, typically this would be done with

       git add <filename>

   After resolving the conflict manually and updating the index with the
   desired resolution, you can continue the rebasing process with

       git rebase --continue

   Alternatively, you can undo the git rebase with

       git rebase --abort

如果有帮助,也请检查此 link。

http://arigrant.com/blog/2014/5/4/git-rebase-stepping-forward-and-back

你的 repo 中的所有内容都会保留在那里,直到 git 发现它已经完全无法通过任何 ref 访问至少一个月 1.

所以你已经做了一些等同于 git rebase master topic 的事情,比如自分支以来关于主题的 A-Z 提交 26完整效果直到 S:

     A...O...Z        topic
    /
...b....*             master
         \
          A2..O2..S2  the inflight rebase with the mistake in the rebased O, O2

您的退出是

git tag restart O2~
git rebase --abort
git rebase --onto restart O^ topic

现在您只需重做被 oops 感染的提交。

如果O2~..S2系列的提交中有好的部分,你想检索冲突解决方案,你也可以标记S2,然后在你重做的时候只检查那些提交中好的部分, git checkout -p boneyard~3 -- goodpart1 goodpart2 etc etc(您将 S2 标记为 "boneyard",好的部分在 P2 中)

我已经做到了,清理了一个 rebase,然后不得不重做。如果每个人都曾经这样做过,我不会感到惊讶。这没什么大不了的,即使对于像你这样看似可怕的案例也是如此。


1您可以强制提前截断。不要那样做。