2011-05-07 113 views
8

Git分支頭和標籤是指向提交的指針,這些指針可以隱式移動(在commit之後)或明確移動(在branch -m之後)。git記錄分支頭的歷史記錄嗎?

請問Git記錄這些指針狀態的歷史嗎?

我看到至少有兩方面的原因:

  • 要查看回購的狀態,前兩天,包括在那裏的分公司主管指出。
  • 確保沒有歷史記錄丟失,因爲有人以某種提交方式無法訪問的方式移動分支頭。

請注意,以上是在Mercurial中可能的,因爲它在每次提交時都存儲分支名稱。

那麼,在Git中是.git/refs/version受控的內容,還是有辦法讓它們變成這樣?我試圖決定一個團隊的Mercurial或Git,並且我想確保所有對共享庫的更改(包括參考資料)都被記錄下來。我不在乎開發者對他們的私有回購)

謝謝。

回答

7

它們沒有版本,但reflog功能保留了本地歷史記錄,您可以使用它來撤銷錯誤。但是,如果有人「倒退」分支頭以從最後放棄一些提交,那麼當另一個開發人員嘗試更新其分支的簽出時,它會立即顯而易見,因爲Git將拒絕在本地進行該更改,除非使用。您可以輕鬆地將提交返回到共享存儲庫。

+1

注意,你也可以防止重繞通過設置'receive.denyNonFastForwards '配置設置。 – 2011-05-07 03:16:05

+0

你的回答救了我,大好時光。一個很大的+200給你! – 2015-04-14 19:06:27

1

像Gerrit這樣的企業Git服務器的擴展可以爲您的分支歷史記錄創建版本。如果某個分支以非快進方式被刪除或更新(push -f) 它將在特殊的ref下支持前一版本,以便在需要時可以恢復它們,並且不會被垃圾回收修剪。出於法律原因,Gerrit管理員仍然可以刪除選定的提交。

0

有兩種方式:

git reflog 

和:

git log -g 

等效採用第一種情況:

git log --oneline -g