git重新基址--继续并--后退?
有没有一种方法可以在交互式重新基址过程中退回提交?没有。您可以--继续重新基址(例如,在解决一些冲突之后),--中止(撤消和整个重新基址过程)或--跳过当前补丁。没有,正如Magnus所说 但是,git重新基址--继续并--后退?,git,Git,有没有一种方法可以在交互式重新基址过程中退回提交?没有。您可以--继续重新基址(例如,在解决一些冲突之后),--中止(撤消和整个重新基址过程)或--跳过当前补丁。没有,正如Magnus所说 但是, git Reere可以在某种程度上接近您想要的解决方案:如果您不想放弃以前的手动冲突解决方案,您可以启用Reere(预先录制的冲突解决方案),以便在后续合并中以相同的方式自动解决这些冲突。请注意,这意味着您必须记住下一次要以不同方式解决的部分(可能是第一步后退的目标?),因为-好吧,Reerre假设
- git Reere可以在某种程度上接近您想要的解决方案:如果您不想放弃以前的手动冲突解决方案,您可以启用
(预先录制的冲突解决方案),以便在后续合并中以相同的方式自动解决这些冲突。请注意,这意味着您必须记住下一次要以不同方式解决的部分(可能是第一步后退的目标?),因为-好吧,Reerre假设您要再次应用相同的解决方案Reere
- 这将使您深入到未记录的内部(管道之外)
- 您也可以提出一个补丁来重新设置基础,该补丁实现了
——退一步
- 获取当前头部的提交哈希,例如使用
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
将回放合并冲突。我认为这个答案是错误的。看看我的“是”——关于如何后退的回答。