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



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截取并略微修改的输出:http://blog.kfish.org/2010/04/git-lola.html)。现在假设我对"重新提交"分支做了一些操作,比如一个不正确的filter-branch,这样我在该分支上有两个新的提交(1234567和7654321,或者其他什么)。我意识到,哦,不,我做了一件完全失败的事情,我想"重新提交"回到指向提交2afb8a0,这是该分支的原始提示。

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

git branch -D tmp
git branch -m original/refs/heads/tmp tmp

将删除您当前的tmp,并将重命名后的tmp重新命名。

(最近添加的新提交filter-branch,你认为你不喜欢它,它仍然会在你的存储库中。一旦你删除了用户可见的名称,它们将在大约3个月后过期,之后git gc将删除它们。)

相关内容

  • 没有找到相关文章

最新更新