如何恢复refs / original / refs / heads / tmp?

时间:2012-03-18 01:47:34

标签: git recovery

Git filter-tree帮助将备份存储在.git/refs/original/refs/heads/tmp中。但我找不到有关如何从中恢复的任何说明。从那时起我就没有触及过存储库 - 我只是改变了我对这种特殊操作的智慧的看法。

我猜测答案是文件副本或git update-ref,但这些操作非常具有破坏性,我不想错。

1 个答案:

答案 0 :(得分:0)

这是要知道的事情,其他所有流程都是如此:除了在执行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 filter-branch的剪切和略微修改的输出。现在说我对我的“重新提交”分支做了一些事情,就像一个不正确的original/refs/heads/tmp,所以我在该分支上有两个新的提交(1234567和7654321,或者其他)。我意识到,哦不,我做了一些完全破碎的事情,我想“重新提交”回到指向提交2afb8a0,这是该分支的原始提示。

该提交仍然在git 中,并且至少会持续几个月(更长时间,因为您拥有用户可见的分支名称git log - 尝试执行original/refs/heads/tmp例如,你会看到它在那里)。在您的情况下找到提交ID-easy,它名为git branch -d resubmit - 并在那里创建分支点。如果你没有名字,你可以git branch resubmit 2afb8a0然后git branch -D tmp git branch -m original/refs/heads/tmp tmp (我上面的例子),但是你这样做了,所以:

tmp

将删除您当前的tmp并将重命名的帐户重命名为filter-branch

(最近添加的新提交git gc,您决定不喜欢它,仍然会在您的存储库中。一旦删除了用户可见名称,它们就会过期3个月,之后{{1}}将删除它们。)