Git filter-tree帮助将备份存储在.git/refs/original/refs/heads/tmp
中。但我找不到有关如何从中恢复的任何说明。从那时起我就没有触及过存储库 - 我只是改变了我对这种特殊操作的智慧的看法。
我猜测答案是文件副本或git update-ref
,但这些操作非常具有破坏性,我不想错。
答案 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}}将删除它们。)