2013-08-26 33 views
0

我們可以恢復曾經添加(但未提交)的文件,之後使用git reset --hard將其刪除。 請參閱Recovering added file after doing git reset --hard HEAD^做ditling git add blobs被推送到主存儲庫?

當我們推進對某些上游存儲庫的更改時,是否還會推入這些Blob?

上下文:在做任何開發時,我偶爾會對已更改的文件進行git添加,但不要提交它們。這一次,我做了一些git添加了一些關鍵的api證書,並且我想知道如果我可以從日誌中恢復它們是否可以從repo/gem開源獲取。

回答

1

不,沒有提交(或明確推送)的blob不會通過線路傳輸。

如果您添加了文件並且從未提交,則應在下次調用git gc時刪除它們。如果你承諾它們,然後再次刪除提交(例如,通過git rebase或git reset),它們將不會被收集,因爲它們可以通過Git的reflog訪問。但reflog是本地機制,不會與git push一起發佈。

0

Git只會將對象鏈接到彼此之間,從一些提交對象開始。

由於它是唯一可能推提交對象(無論你直接使用他們的SHA-1名或間接通過brahch或標籤名稱爲它們命名),Git的傳輸提交,並每次提交指的是單對象,表示存儲庫的根,它本身是指blob(表示單個文件的內容)和其他樹。

所以只有來自根樹對象的對象可達與引用該樹對象的提交一起傳輸;這是爲每個提交被傳送到遠程存儲庫完成的。根據定義,懸空物體不可到達,因此它們不會被轉移。