撤消git rebase

有人知道如何轻松地撤销git rebase吗?

想到的唯一方法是手动进行:

  • git签出两个分支的提交父项
  • 然后从那里创建一个临时分支
  • 手工挑选所有提交
  • 替换我通过手动创建的分支重新分配的分支
  • 在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支提交(一个是我的东西,另一个是我的同事的东西)。

    然而,我的方法让我觉得不理想,并且容易出错(假设我刚刚在我自己的分支中重组了2个)。

    有任何想法吗?

    澄清:我正在谈论重新发布一系列提交时的转义。 不只一个。


    最简单的方法是找到分支的头部提交,因为它是在reblog开始之前立即进行的。

    git reflog
    

    并重新设置当前分支(通常在使用--hard选项重设前通常需要注意的事项)。

    假设旧的提交在ref日志中是HEAD@{5}

    git reset --hard HEAD@{5}
    

    在Windows中,您可能需要引用该引用:

    git reset --hard "HEAD@{5}"
    

    您可以通过执行git log HEAD@{5} (Windows: git log "HEAD@{5}" )来检查候选人老头的历史git log "HEAD@{5}"

    如果你没有禁用每个分支reflogs,你应该可以简单地做git reflog branchname@{1}作为rebase分离分支头,然后重新附加到最后的头部。 我会仔细检查一下,尽管最近我还没有证实这一点。

    默认情况下,所有reflog都针对非裸仓库激活:

    [core]
        logAllRefUpdates = true
    

    实际上,rebase将您的起点保存到ORIG_HEAD所以这通常很简单:

    git reset --hard ORIG_HEAD
    

    但是, resetreset rebasemerge都会将原始HEAD指针保存到ORIG_HEAD因此,如果您在尝试撤消重新绑定后执行了任何这些命令,则必须使用reflog。


    查尔斯的答案有效,但你可能想这样做:

    git rebase --abort
    

    reset后清理。

    否则,您可能会收到消息“ Interactive rebase already started ”。

    链接地址: http://www.djcxy.com/p/553.html

    上一篇: Undoing a git rebase

    下一篇: Recovering added file after doing git reset