2013-08-27 82 views
2

我有一個測試存儲庫,包含一個主分支和測試分支。我在測試分支做了一些改變,並做了測試分支的標記。然後我刪除了測試分支(不,我沒有和主人合併)。令人驚訝的是,當我嘗試使用之前做過的標籤簽出時,我能夠獲得之前刪除的測試分支(當然,在「分離頭」狀態下,在「無分支」中)。這怎麼可能?有人可以幫助我理解這一點嗎?能夠使用git標記恢復已刪除的分支

+1

你期望什麼?當你爲一個提交標記時,你將能夠通過標記返回該提交,而不管它是否在任何分支上。 – knittl

+0

@knittl,我來自CVS背景,我曾預料,一旦我刪除分支,在分支上提交的提交的標籤也將被刪除。 – Shunya

+0

不,標籤是永久性的,並且與標籤垂直科。兩者都可以在Git中獨立存在。 – knittl

回答

7

操作後Git對象不會立即刪除(例如,它們可以用git reflog恢復)。你必須明確地使用git gc(它也調用git prune)來手動刪除它們,或者等待一段時間來控制gc.pruneexpire自動修剪它們(如果這是由gc.auto啓用的)。

此外,只有在沒有引用它們的情況下才永久刪除對象,在這種情況下,您仍然有一個標籤,因此提交及其歷史記錄將被保留。

檢查此命令的輸出:

git log --oneline --decorate --graph --all 

它會給你你的版本庫的概述,你在這裏看到的提交將不會被永久垃圾收集器刪除。

+0

這意味着我創建的標籤是一個引用,如果是這種情況,當我使用標籤進行結賬時,爲什麼它簽出爲DETACHED HEAD狀態?根據我的理解,當HEAD沒有指向任何引用(標記或分支),但它指向提交哈希(提交的SHA1)時,會發生DETACHED HEAD狀態。你能幫我理解一下嗎? – Shunya

+0

這是一個「獨立的頭」,因爲它不屬於任何分支,你刪除它。 – KurzedMetal

+0

「致命:無法識別的參數: - 在線」? git 1.8.x,Win7 – Number8