Git重置当前变基

18

我一直在进行变基。我已经处理了一些冲突,但最终走错了方向,现在我只想重新开始解决这些冲突。

我想重置变基,这样我仍然可以变基到当前提交,但工作副本已经被重置到第一次出现冲突的提交。

如何在当前提交上重置变基?

6个回答

23

如果您正在执行变基操作,您可以进行以下操作:

git rebase --abort

9
这将中止整个变基操作,而不仅仅是重新定位这一次提交。 - Puppy

14

首先,清理杂物:

git reset --hard HEAD

然后,挑选你正在变基的提交:

git cherry-pick -n `git rev-parse REBASE_HEAD`

就是这样。像往常一样,在解决冲突后,您将能够继续执行变基。


这基本上允许您重新启动当前的变基阶段,太棒了! - Mitchell McKenna

12

如果您只想为特定文件重新合并,您需要做的就是:

git checkout -m <file>

如果你想重新做整个提交,这是我如何做的(可能有更好的方法):

  1. 在rebase过程中出现冲突
  2. 我搞砸了冲突的解决
  3. 我运行 git status,在Git 2.0.0及以上版本中,会给我一个类似下面这样的输出(仅适用于交互式rebase):

interactive rebase in progress; onto 14ed389
Last command done (1 command done):
   pick db2511c Modify file
Next command to do (1 remaining command):
   pick d1c2037 Modify file one more time
  (use "git rebase --edit-todo" to view and edit)
You are currently rebasing branch 'other' on '14ed389'.
  (fix conflicts and then run "git rebase --continue")
  (use "git rebase --skip" to skip this patch)
  (use "git rebase --abort" to check out the original branch)

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

        both modified:   file.txt
  • 我复制了正在执行的rebase命令行:pick db2511c 修改文件
  • 我运行git rebase --edit-todo,并将该行粘贴到文件顶部
  • 我运行git rebase --skip

  • 1

    如果你经常这样做(像我一样),你可以创建一个有用的git别名(基于Pierre的优雅答案

    [alias]
        # Restart the current rebase step if you accidentally messed it up
        # SEE: https://dev59.com/LVsW5IYBdhLWcg3wSFjW#53141807
        restart-rebase-step = !git reset --hard HEAD && git cherry-pick -n `git rev-parse REBASE_HEAD`
    

    之后您可以在命令行中调用它:

    git restart-rebase-step
    

    0

    如果要使用 elstgav resolution 而不带别名,请先进行重置:

    git reset --hard HEAD
    

    然后获取rebase的SHA1:

    rev-parse REBASE_HEAD
    b10b228e263dfa223221036fa17506445a101f0f // this is the SHA1 value
    

    接着,使用SHA1值与cherry-pick命令:

    git cherry-pick -n b10b228e263dfa223221036fa17506445a101f0f
    

    0
    如果您在多个分支上编辑了相同的文件,并且在重新设置时决定要保留一些工作而不是放弃已经进行的所有更改(git rebase --abort),那么我猜您需要查看目录.git/rebase-apply并检查patch文件。它包含在重新设置期间进行的所有更改。在执行git rebase --abort后,您需要手动应用此补丁。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接