我想洗掉提交并清除我的 git 日志歷史記錄。
但是當我這樣做時,一些提交并沒有消失。
(使用命令:git log --all --graph --oneline)
我不知道為什么
這是我的例子
混帳日志_1
我做了2個分支(br1,br2),沒有和master合并。
然后我洗掉了 2 個分支 (br1, br2)
但是日志中仍然有提交('log --all' 不是 'log')
而且我確實重置或變基以洗掉它們。
混帳日志_2
我做錯了什么嗎?
或者當它有標簽時我不能洗掉日志中的提交嗎?
uj5u.com熱心網友回復:
正確的解釋是,你不能洗掉提交所有。就其存在而言,提交是否具有與其關聯的標簽或分支名稱并不重要。并且提交是否存在也無關緊要!重要的git log是是否git log可以找到 commit。
顯然git log不會找到不存在的提交。但有時git log找不到確實存在的提交。所以有趣的問題是:什么時候可以git log找到提交?
答案是:只要你直接或間接地給它正確的哈希 ID。
您git log可以通過鍵入以下內容直接提供提交哈希 ID:
git log b30a5cf
例如。Git 查找該哈希 ID——從技術上講,這是一個縮短的哈希 ID;Git 檢查以確保恰好有一個具有以該b30a5cf數字開頭的完整哈希 ID 的提交 - 并且找到該提交后,會git log顯示該提交。然后它繼續顯示更多提交。
您可以通過執行以下任一操作來間接提供git log提交哈希 ID :
- 提供可轉換為哈希 ID的名稱,例如
master或basePoint例如; - 提供一個像
--branches,--tags, or--all這樣的標志,告訴git log查找所有分支名稱、所有標記名稱或所有參考;1或 - 直接或間接提供一個提交的哈希 ID,該 ID 又包含另一個提交的哈希 ID,或者可能是多個附加提交。
最后一點是理解 Git 的關鍵之一。 每個提交都包含一個先前提交哈希 ID 的串列。 在大多數提交中,該串列只有一個條目,Git 將其稱為提交的父項。因此,每個提交都指向(向后,而不是向前)指向其父項:
... <-o <-o <-o ...
這里的輪os 代表提交,后面的提交向右。后者將每個點向后提交到一個較早的提交。
如果你運行:
git log master
或者:
git log b30a5cf
你告訴git log查找那個特定的提交,它確實這樣做了;它顯示提交,然后找到提交的父項,在這種情況下只是一個 commit c348c14。該git log命令然后顯示該提交,并跟隨向后箭頭到下一個(或者更確切地說,上一個)提交并顯示該提交。
使用--all,您告訴git log從所有具有名稱的提交開始。這變得更加復雜,因為現在git log必須一次顯示多個提交,而實際上不能。因此,它會根據優先級選擇要顯示的提交。Using--graph修改優先級選擇,以便git log可以繪制從每個提交到其前驅的連接。
洗掉名稱不會洗掉提交。它只是洗掉您的訪問,以通過該名稱提交。如果您可以通過其他名稱訪問該提交,您仍然可以找到該提交。如果您記住提交的哈希 ID,那么即使沒有名稱或其他提交提供訪問權限,您也可以通過原始哈希 ID 訪問提交。
如果實際上沒有Git 可以通過其找到提交的名稱,則該提交符合 Git 稱為垃圾收集的條件。默認情況下,這些“放棄”的提交將持續至少 14 天,大多數情況下默認情況下會持續 30 天。之后,git gc可以決定提交沒有實際價值,并真正將其洗掉。但是您不能直接洗掉它,并且您無法準確控制何時git gc開始洗掉它。您所能做的就是洗掉找到提交的名稱,這樣您就不必再看到它了。2
1個甲參考是“可以找到一些GIT中物件的任何名稱”廣義形式。分支名和標簽名是兩種參考,但還有更多。
2在緊急情況下——例如在不小心將一個 TB 的資料庫添加到 Git 存盤庫之后——可以手動清除這些東西。不過比較麻煩。這不是你想要經常做的事情。
uj5u.com熱心網友回復:
git log將顯示任何提交可達。
意義:
- 可從分支 HEAD 到達
- 或從標簽
因此,您需要洗掉標簽,而不僅僅是分支
git tag -d br2-tag
請注意,所有這些步驟僅適用于您的本地存盤庫。
如果您還推送了這些分支和標簽,則您也需要推送它們的洗掉。
git push --delete origin br2
git push --delete origin br2-tag
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380586.html
標籤:混帐
下一篇:默認鏡像倉庫
