恢复被重命名覆盖的分支(git branch -M)

时间:2016-07-18 15:50:42

标签: git

我最初有一个分支,但我不小心用另一个分支用git branch -M命令覆盖了它。

有没有办法恢复被覆盖的分支(哈希)?

Reflog没有显示任何先前的提交哈希,并且我无法在任何地方找到原始分支的提交哈希。

2 个答案:

答案 0 :(得分:1)

我做了一个测试。

$ git branch
* master
$ git reflog master
63fa031 master@{0}: clone: from git://192.168.70.128/
$ git branch -M master nice
$ git branch
* nice
$ git reflog master
fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$ git reflog nice
63fa031 nice@{0}: Branch: renamed refs/heads/master to refs/heads/nice
63fa031 nice@{1}: clone: from git://192.168.70.128/

因此git reflog <newbranch>可以显示重命名历史记录。

答案 1 :(得分:0)

不幸的是,似乎重命名分支也会重命名(在您的情况下,覆盖)其reflog,因此您无法再访问覆盖分支的reflog。

但是git fsck --no-reflogs仍然可以提及提交哈希,因为它记录了分支检出。如果在reflog中没有提到该提交(或者您不确定它是否),请尝试{{1}},它将列出(除其他事项外)所有悬空提交,其中一个应该是您的覆盖分支的头部