git重新基址--继续并--后退?

git重新基址--继续并--后退?,git,Git,有没有一种方法可以在交互式重新基址过程中退回提交?没有。您可以--继续重新基址(例如,在解决一些冲突之后),--中止(撤消和整个重新基址过程)或--跳过当前补丁。没有,正如Magnus所说 但是, git Reere可以在某种程度上接近您想要的解决方案:如果您不想放弃以前的手动冲突解决方案,您可以启用Reere(预先录制的冲突解决方案),以便在后续合并中以相同的方式自动解决这些冲突。请注意,这意味着您必须记住下一次要以不同方式解决的部分(可能是第一步后退的目标?),因为-好吧,Reerre假设

有没有一种方法可以在交互式重新基址过程中退回提交?

没有。您可以--继续重新基址(例如,在解决一些冲突之后),--中止(撤消和整个重新基址过程)或--跳过当前补丁。

没有,正如Magnus所说

但是,

  • git Reere可以在某种程度上接近您想要的解决方案:如果您不想放弃以前的手动冲突解决方案,您可以启用
    Reere
    (预先录制的冲突解决方案),以便在后续合并中以相同的方式自动解决这些冲突。请注意,这意味着您必须记住下一次要以不同方式解决的部分(可能是第一步后退的目标?),因为-好吧,Reerre假设您要再次应用相同的解决方案
如果您查看rebase的实现,您可能会找到GIT_WORK_TREE/GIT_DIR/GIT_INDEX的替代设置;然后,您可能可以将管道命令与reflog一起用于正在进行的重新基准分支

  • 这将使您深入到未记录的内部(管道之外)
  • 您也可以提出一个补丁来重新设置基础,该补丁实现了
    ——退一步

    • 是的,有。如何在交互式重设基础期间后退:

    • 获取当前头部的提交哈希,例如使用
      git rev parse HEAD
    • 运行git rebase--edit todo
    • 将带有该散列的pick插入该文件的顶部
      pick
    • 运行
      git重置--硬头^
    • 现在,您仍然处于重定基址中,但有一次提交回来,您可以自由地继续使用重定基址

    • git-rebase——继续
    • 如果您不希望在不进行编辑的情况下直接拾取未完成的提交,可以将
      edit
      而不是
      pick
      添加到todo列表中(步骤3)

      附录:您可以记住更多的散列,重置到更早的点,并添加多个选择以重做多个提交


      想法来源:

      事实上,即使您没有进行交互式重新基址,您也可以这样做

      正如johnb003在他的评论中提到的,当重定基址时,您实际上正在进行一系列新的提交。通过执行git log--pretty=oneline--abbrev commit
      之类的操作,您可以很容易地看到通过rebase进行的所有提交。只需复制它们的哈希值,以便以后参考


      然后
      git-rebase--abort
      git-rebase-i
      ,复制要保留的哈希值,如果要修改其中任何一个,可能会将其更改为
      edit
      ,然后继续

      @JohannesMüller该问题专门询问了交互式重新基址中的后退。请注意,当您在交互式重新基址期间执行此操作,并且git由于合并冲突而停止时,您还需要手动添加与要应用的基址相关的提交。这不再包括在待办事项列表中。因此,如果您不手动包含,您将在新的历史记录中丢失该提交。我还不知道如何向git索要这个散列,但我的GUI客户端向我展示了它,所以这对我来说是有效的。我认为你的回答提出了正确的想法,但答案本身可以改进。其思想是:查看git日志中的内容,将所有提交添加到您想要重新缠绕到rebase todo的最早位置,然后在添加到列表中的提交之前重置为提交。建议用户只选择提交的头可能是自以为是的。再说了,你不会直接回到你现在的位置吗?除了选择要回滚到的对象外,您还需要使用“编辑”或其他一些“重基”命令。@johnb003我稍微更新了一下答案。您的措辞可能会更好。为了重申Rolf W.的观点,当您执行
      git rebase--edit todo
      时,如果发生合并冲突,则必须包含当前提交,因为它尚未提交到HEAD,但也不再在todo列表中。您可以使用
      git rev parse--short REBASE_HEAD
      获取此提交的SHA-1,并使用
      pick
      将其添加到todo列表的开头,也可以使用
      tail-1`git rev parse--show topflevel`/.git/REBASE merge/done
      从原始todo列表中获取准确的行。在此之后,
      git reset--hard HEAD
      将回放合并冲突。我认为这个答案是错误的。看看我的“是”——关于如何后退的回答。