我的 git 存盤庫最近被 Nextcloud 同步搞砸了。這給它留下了一個缺少樹的提交。
broken link from commit ddf33d3d1b8278e1fd0d395209f2dbbd168f45c6 (refs/heads/master@{1632991805})
to tree b34b983985fdbe6b1173e2c1e442577bfbf393c1 (refs/heads/master@{1632991805}:)
我想在下一次提交中用樹覆寫丟失的樹,這樣我就可以在保留我的歷史記錄的同時解決問題。簡單地變基,洗掉提交失敗,fatal: unable to read tree b34b983985fdbe6b1173e2c1e442577bfbf393c1.
任何幫助表示贊賞!
uj5u.com熱心網友回復:
從技術上講,您無法更改任何現有 Git 物件的任何內容。所以你不能改變某些提交點的樹。
這就是說,你不具備做那。考慮使用git replace,它適用于任意物件:用于git replace讓您的 Git 使用下一個(或上一個)提交的樹而不是丟失的樹。只需使用語法:git replace object replacement
git replace b34b983985fdbe6b1173e2c1e442577bfbf393c1 ...
(填寫...所需的樹)。
這應該可以讓您的 rebase 取得進展。
注意:現在備份錯誤的存盤庫可能是個好主意(您可以使用簡單的遞回副本),然后在根據需要對其進行調整后將其克隆到一個新存盤庫并丟棄(或至少停止使用)中間存盤庫復制與替換。
編輯:git replace太聰明了,所以用來解決這個問題。您仍然需要克隆編輯過的克隆。要使所有內容都顯示在克隆的克隆中,然后洗掉克隆克隆的痕跡,請使用:git replace --edit commit-with-bad-tree
git clone file://<path> new-clone
cd new-clone
git fetch origin ' refs/*:refs/*'
git remote remove origin
以及隨后的(git remote add origin ...如果合適)。
編輯 2:git clone幾乎肯定會失敗,因為它不會服從替換。您需要運行git filter-branch(沒有過濾器),這會以修復它的名義故意損壞壞的存盤庫(雖然最終可能無害,但不是很好),或者使用新git filter-repo命令進行更正的克隆。我自己沒有嘗試過后者,所以我在這里沒有任何特別的說明。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391826.html
標籤:混帐
