如何轻松撤消git重基?冗长的手动方法是:

签出两个分支的提交父级创建并签出临时分支手工挑选所有提交重置故障的重基分支以指向临时分支

在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是同事的东西)。然而,我的方法给我的印象是次优且容易出错(假设我刚刚用自己的两个分支重新建立了基础)。

澄清:我所说的是一个重基,在重基过程中,多次提交被重复,而不仅仅是一次。


当前回答

最简单的方法是找到分支的头部提交,因为它在reflog中的rebase开始之前。。。

git reflog

并将当前分支重置为它(通常需要注意的是,在使用--hard选项重设种子之前要绝对确定)。

假设ref日志中的旧提交是HEAD@{2}:

git reset --hard HEAD@{2}

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

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

您可以通过执行git-log head@{2}(Windows:git-log“head@{2}”)来检查候选旧标头的历史记录。

如果您没有禁用每个分支的reflog,您应该能够简单地执行gitreflog branchname@{1},因为在重新连接到最终头之前,rebase会分离分支头。我会再次检查这个,尽管我最近没有验证过。

默认情况下,为非裸存储库激活所有reflog:

[core]
    logAllRefUpdates = true

其他回答

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

git rebase --abort

重置后进行清理。

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

实际上,在执行任何非平凡操作之前,我在分支上放置了一个备份标记(大多数重基是微不足道的,但如果它看起来很复杂,我会这样做)。

然后,恢复就像git reset一样简单——hard BACKUP。

如果您已经将分支推送到远程存储库(通常是它的源位置),然后您成功地进行了重基(没有合并)(gitrebase--abort给出“没有正在进行的重基”),您可以使用命令:

git reset--硬原点/{branchName}

例子:

$ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is ahead of 'origin/{branchName}' by 135 commits.
  (use "git push" to publish your local commits)

nothing to commit, working directory clean

$ ~/work/projects/{ProjectName} $ git reset --hard origin/{branchName}
HEAD is now at 6df5719 "Commit message".

$ ~/work/projects/{ProjectName} $ git status
On branch {branchName}
Your branch is up-to-date with 'origin/{branchName}.

nothing to commit, working directory clean

最简单的方法是找到分支的头部提交,因为它在reflog中的rebase开始之前。。。

git reflog

并将当前分支重置为它(通常需要注意的是,在使用--hard选项重设种子之前要绝对确定)。

假设ref日志中的旧提交是HEAD@{2}:

git reset --hard HEAD@{2}

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

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

您可以通过执行git-log head@{2}(Windows:git-log“head@{2}”)来检查候选旧标头的历史记录。

如果您没有禁用每个分支的reflog,您应该能够简单地执行gitreflog branchname@{1},因为在重新连接到最终头之前,rebase会分离分支头。我会再次检查这个,尽管我最近没有验证过。

默认情况下,为非裸存储库激活所有reflog:

[core]
    logAllRefUpdates = true

对于多次提交,请记住,任何提交都引用导致该提交的所有历史记录。因此,在查尔斯的回答中,将“旧承诺”读为“旧承诺中的最新承诺”。如果您重置为该提交,那么导致该提交的所有历史记录都将重新出现。这应该是你想要的。