首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何恢复refs/original/refs/head/tmp?

如何恢复refs/original/refs/head/tmp?
EN

Stack Overflow用户
提问于 2012-03-18 09:47:34
回答 1查看 783关注 0票数 0

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

我猜答案要么是文件拷贝,要么是git update-ref,但这些都是破坏性很强的操作,我不想弄错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-18 10:09:03

需要知道的是,除了在做git gc (好吧,git gc也会做的事情)之外,git从来不会删除任何东西,它只会添加新的东西。

假设您有一个如下所示的分支:

代码语言:javascript
复制
* 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 lolahttp://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 (对于我上面的例子),但是你有名字,所以:

代码语言:javascript
复制
git branch -D tmp
git branch -m original/refs/heads/tmp tmp

将删除您当前的tmp,并将重命名的your重命名为tmp

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9755340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档