Git 如何恢复refs/原始/refs/heads/tmp?

Git 如何恢复refs/原始/refs/heads/tmp?,git,recovery,Git,Recovery,Git筛选器树在.Git/refs/original/refs/heads/tmp中有效地存储了备份。但是我找不到任何关于如何从中恢复的说明。从那以后,我就再也没有接触过存储库——我只是改变了我对这种特殊操作的看法 我猜答案要么是文件副本要么是git update ref,但这些都是非常具有破坏性的操作,我不想弄错。这里有一件事需要知道,所有其他事情都是从中产生的:除了做git gc(当然,事情git gc也会做),git从不删除任何东西,它只会增加新的东西 假设您有一个分支,看起来像这样: *

Git筛选器树在
.Git/refs/original/refs/heads/tmp
中有效地存储了备份。但是我找不到任何关于如何从中恢复的说明。从那以后,我就再也没有接触过存储库——我只是改变了我对这种特殊操作的看法


我猜答案要么是文件副本要么是git update ref,但这些都是非常具有破坏性的操作,我不想弄错。

这里有一件事需要知道,所有其他事情都是从中产生的:除了做
git gc
(当然,事情
git gc
也会做),git从不删除任何东西,它只会增加新的东西

假设您有一个分支,看起来像这样:

* 9d2e82c handle another temporary failure mode
| * 2afb8a0 (resubmit) checkpoint: resubmit
| * 90dcfbb move definitinon of GRONK to sysdefs
|/  
* 1ba7847 treat XML login errors as temporary failures
(这是从
git lola
:)截取并稍微修改的输出)。现在假设我对我的“重新提交”分支做了一些操作,比如一个不正确的
过滤器分支
,这样我在该分支上有两个新提交(1234567和7654321,或其他)。我意识到,哦,不,我做了一些完全破坏的事情,我想“重新提交”回到指向commit 2afb8a0,这是该分支的原始提示

该提交仍在git中,并且至少会持续几个月(更长时间,因为您有用户可见的分支名称
original/refs/heads/tmp
——例如,尝试在其上执行
git log
,您会看到它就在那里)。在您的案例中,很容易找到commit ID,它的名称为
original/refs/heads/tmp
,并在那里指出您的分支点。如果你没有名字,你可以做
git branch-d重新提交
,然后
git branch重新提交2afb8a0
(在我上面的例子中),但是你有,所以:

git branch -D tmp
git branch -m original/refs/heads/tmp tmp
将删除当前的
tmp
,并将重命名的tmp重新命名为
tmp


(最近添加的新提交
filter分支
,您最终决定不喜欢它,它仍将保留在您的存储库中。一旦您删除了用户可见名称,它们将在大约3个月后过期,
git gc
将删除它们。)

Oh-备份与其他任何备份一样只是一个参考。这就是我错过的一点。:)啊哈,是的,这是一个很好的说法。但是,即使您丢失了提交仍然存在的ref名称,它们也会变得更难找到。