git - 撤消 git rebase

标签 git rebase git-rebase undo

如何轻松撤消 git rebase?一个冗长的手动方法是:

  1. 检查两个分支的提交父级
  2. 创建并 checkout 一个临时分支
  3. 手动挑选所有提交
  4. 重置错误的 rebased 分支以指向临时分支

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

澄清:我说的是 rebase,在此期间,多个 提交被重放,而不仅仅是一个。

最佳答案

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

git reflog

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

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

git reset --hard HEAD@{2}

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

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

只需执行 git log HEAD@{2}(Windows: git log "HEAD@{ 2}").

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

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

[core]
    logAllRefUpdates = true

关于git - 撤消 git rebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/134882/

相关文章:

Git 从所有提交中删除文件

git - git add -n --ignore-missing 实际上做了什么?

git - 同时对分支进行 rebase 和反向 merge

git - "git rebase origin"与 "git rebase origin/master"

git - 重新设置一个分支,包括它的所有子分支

git - 在github上 pull 一个 "podified"项目的分支

git - 错误 : could not lock config file C:/SPB_Data/. gitconfig: 没有那个文件或目录

git - 如何向后 rebase ,最好不使用 diff/apply?

git - 如何在 rebase 期间为所有提交运行测试

macos - Git rebase 错误 : This application will not run on your computer