2013-06-21 114 views
2

我知道它們存在於git reflog中,但是如果我將提交推送到遠程存儲庫,修改,然後git push --force(通常應避免警告:pushing --force遠程存儲庫),我覆蓋的提交是否存在?Git是否存儲修改?

回答

5

我會覆寫的提交是否存在?

只有:


注意ORIG_HEAD(一個memento from a time where reflog didn't existed yet)是創建/一個git commit(如git commit --amendgit commit --amend -m "new comment")更新。
因此,如果reflog未在回購庫上激活,則ORIG_HEAD不能用於引用修改後的提交。

+0

我應該注意的是,通常會推送到裸倉庫,裸倉庫默認情況下禁用reflog。所以第二點應該有一個很大的「如果」附加到它。 – kostix

+0

@kostix好點,我在答案中包含了回覆日誌激活裸回購。 – VonC

+0

我也相信(雖然我懶得檢查)'ORIG_HEAD'參考文件可能指向在修改修改之前提到的提交'HEAD'。理論上,如果reflog由於某種原因在正常的本地存儲庫中被禁用(我的意思是,沒有'git fsck'運行需要手動探索),這可能能夠緩解人們的脖子問題。 – kostix

1

編號您的修改後的提交將保留在您的本地回購中一段時間​​,但不會推送。

推送時,Git會計算缺少的提交以使遠程分支與本地分支處於同一點。由於您的修改提交不在分支上,因此不會推送。

修改後的提交保留,直到發生垃圾回收。但GC在刪除提交之前檢查了幾個條件,所以不要害怕丟失數據。

+0

在OP描述的場景中,提交在修改之前被推送。 –

+0

哦,是的,謝謝,我剛剛看到。因爲它沒有被編輯,我一定誤解了這個問題。 VonC BTW非常好的答案,我upvoted。 –