git rebase操作怎么undo或者撤销掉?

git by Xudong Zhang @ 2015-10-16 13:56:41

git rebase不成功可以git rebase --abort取消,但是如果成功了,然后又想回到rebase之前该怎么弄?

我在release分支rebasetmp分支,然后又回到tmp分支做了很小的修改,关键还用的是git commit --amend提交的,这样再去release分支rebase就有问题了,所以想取消release分支的上一次rebase.


git rebase没有什么对应的好的undo指令.

  1. 如果你rebase之前的记录跟远端(remote)是同步的,rebase后没有push的话, hard reset到之前的某个commit然后再git pull下来就行,或者直接删掉这个本地分支再git pull.

  2. 如果rebase之前跟remote是不同步的,就不能通过git pull这种方法了. 我能想到的比较快的方法就是通过git reflog找到rebase前的HEAD的commit id. 然后git reset --hard HEAD_ID

    $git reflog
    0009a47 HEAD@{14}: rebase finished: returning to refs/heads/release-0.1
    0009a47 HEAD@{15}: rebase: add github oauth2
    ee24f70 HEAD@{18}: rebase: checkout tmp
    81c0025 HEAD@{19}: checkout: moving from tmp to release-0.1
    ee24f70 HEAD@{20}: pull origin tmp: Fast-forward
    

关键是要确定rebase之前的HEAD的commit id,用git reflog获得可能的commit id之后,可以用git log COMMIT_ID来查看确认.

by Xudong Zhang @2015-10-16 14:17:15.193 +0800 CST


我来回答

Markdown格式技巧

  • 行尾添加2个空格或者添加一个空行就能换行
  • 斜体: *hello* 或者 _world_
  • 加粗: **hello** 或者 __world__
  • 代码块: 添加空行,然后代码缩进4个空格
  • 特殊字符: 用\避免转义;\*就是*本身
  • python: `__name__`可以以代码形式输出__name__
  • 一个简单的例子

切换到移动版