Git filter-tree很有帮助地在.git/refs/original/refs/heads/tmp中存储了一个备份。但我找不到任何关于如何从它恢复的说明。从那时起,我就再也没有接触过存储库--我只是改变了我对这种特殊操作的智慧的看法。
我猜答案要么是文件拷贝,要么是git update-ref,但这些都是破坏性很强的操作,我不想弄错。
发布于 2012-03-18 10:09:03
需要知道的是,除了在做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:http://blog.kfish.org/2010/04/git-lola.html的经过剪辑和略微修改的输出)。现在假设我对我的“重新提交”分支做了一些事情,比如一个不正确的filter-branch,所以我在那个分支上有两个新的提交(1234567和7654321,或者其他)。我意识到,哦,不,我做了一些完全失败的事情,我希望“重新提交”返回到提交2afb8a0,这是该分支的原始提示。
该提交仍在git中,并将至少持续几个月(更长的时间,因为您有用户可见的分支名称original/refs/heads/tmp-try在其上执行git log,您将看到它就在那里)。找到提交ID-在您的情况下很简单,它名为original/refs/heads/tmp-and,使您的分支指向那里。如果你没有名字,你可以先写git branch -d resubmit,然后写git branch resubmit 2afb8a0 (对于我上面的例子),但是你有名字,所以:
git branch -D tmp
git branch -m original/refs/heads/tmp tmp将删除您当前的tmp,并将重命名的your重命名为tmp。
(新的提交filter-branch最近添加的,你决定毕竟不喜欢的东西,仍然会在你的存储库中。一旦您删除了用户可见名称,它们将在大约3个月后过期,之后git gc将删除它们。)
https://stackoverflow.com/questions/9755340
复制相似问题