使用重命名命令 (git branch -M) 覆盖了一个分支后如何恢复该分支

3

我最初创建了一个分支,但不小心使用git branch -M 命令将其与另一个分支合并了。

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

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

2个回答

2

我做了一个测试。

$ 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> 可以显示重命名历史记录。

它只显示了覆盖分支的历史记录。我想要“被覆盖”的分支的历史记录。 - SHH
1
在我的情况下,“overwritten”分支指向63fa031,或者是nice@{0},当它的名称被更改时。git log 63fa031可以显示它的提交历史记录。git checkout -b master 63fa031可以恢复它。 - ElpieKay

1
很不幸,似乎重命名分支也会重命名(在您的情况下,覆盖)其reflog,因此您无法再访问被覆盖分支的reflog。
但是,提交哈希仍然可以在git reflog中提到,因为它记录了分支检出。如果该提交未在reflog中提到(或者您不确定是否提到),请尝试git fsck --no-reflogs,它将列出(除其他外)所有悬空提交之一应该是您被覆盖分支的头部。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接