2012-03-18 72 views
0

Git過濾器樹有助於在.git/refs/original/refs/heads/tmp中存儲備份。但我找不到有關如何從中恢復的任何說明。自那以後,我沒有觸及倉庫 - 我只是改變了我對這個特定操作的智慧的看法。如何恢復refs/original/refs/heads/tmp?

我猜答案要麼是文件副本,要麼是git update-ref,但這些都是非常具有破壞性的操作,我不想弄錯它。

回答

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 lolahttp://blog.kfish.org/2010/04/git-lola.html)。現在說我對我的「重新提交」分支做了一些事情,比如不正確的filter-branch,所以我在該分支上有兩個新的提交(1234567和7654321,或其他)。我意識到,哦,不,我做了一件徹底壞掉的事情,我想「重新提交」回去指向提交2afb8a0,這是該分支的原始提示。

犯下是還在混帳,並將於數月至少(長,因爲你有用戶可見的分支名original/refs/heads/tmp - 嘗試它做git log例如,你會看到它的存在) 。在你的案例中找到提交ID-easy,它被命名爲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將刪除它們。)

+0

噢 - 備份只是一個像其他任何裁判。這就是我錯過的一點。 :) – 2012-03-18 08:10:19

+0

啊哈,是的,這是一個好方法。但即使你失去了ref名字的提交仍然在那裏,他們只是變得更難找到。 – torek 2012-03-18 08:22:49