Git
English ▾ 主題 ▾ 最新版本 ▾ git-replace 上次更新於 2.44.0

名稱

git-replace - 建立、列出、刪除取代物件的參照

概要

git replace [-f] <object> <replacement>
git replace [-f] --edit <object>
git replace [-f] --graft <commit> [<parent>…​]
git replace [-f] --convert-graft-file
git replace -d <object>…​
git replace [--format=<format>] [-l [<pattern>]]

描述

refs/replace/ 命名空間中新增一個取代參照。

取代參照的名稱是要被取代的物件的 SHA-1。取代參照的內容是取代物件的 SHA-1。

被取代的物件和取代物件必須是相同的類型。可以使用 -f 來繞過此限制。

除非指定了 -f,否則取代參照必須尚不存在。

對於被取代的物件和取代物件沒有其他限制。合併提交可以被非合併提交取代,反之亦然。

除了執行可達性遍歷的命令(prune、pack transfer 和 fsck)外,所有 Git 命令預設都會使用取代參照。

可以使用 git 後面的 --no-replace-objects 選項來停用任何命令的取代參照。

例如,如果提交 foo 已被提交 bar 取代

$ git --no-replace-objects cat-file commit foo

顯示關於提交 foo 的資訊,而

$ git cat-file commit foo

顯示關於提交 bar 的資訊。

可以設定 GIT_NO_REPLACE_OBJECTS 環境變數以達到與 --no-replace-objects 選項相同的效果。

選項

-f
--force

如果存在相同物件的現有取代參照,它將會被覆寫(而不是失敗)。

-d
--delete

刪除給定物件的現有取代參照。

--edit <物件>

以互動方式編輯物件的內容。<物件> 的現有內容會以美觀的方式列印到一個臨時檔案中,在該檔案上啟動一個編輯器,然後解析結果以建立一個與 <物件> 類型相同的新物件。接著會建立一個取代參照,以使用新建立的物件取代 <物件>。有關如何選擇編輯器的詳細資訊,請參閱 git-var[1]

--raw

在編輯時,提供原始物件內容,而不是美觀列印的內容。目前這只會影響樹狀結構,它們將以二進位形式顯示。這比較難以處理,但可以在修復一個損壞到無法美觀列印的樹狀結構時提供協助。請注意,您可能需要設定您的編輯器,以順利讀取和寫入二進位資料。

--graft <提交> [<父提交>…]

建立一個接枝提交。建立一個新提交,其內容與 <提交> 相同,不同之處在於其父提交將會是 [<父提交>…​],而不是 <提交> 的父提交。接著會建立一個取代參照,以使用新建立的提交取代 <提交>。使用 --convert-graft-file 來轉換 $GIT_DIR/info/grafts 檔案並改用取代參照。

--convert-graft-file

$GIT_DIR/info/grafts 中的所有項目建立接枝提交,並在成功後刪除該檔案。目的是協助使用者從現在已棄用的接枝檔案轉換。

-l <模式>
--list <模式>

列出符合給定模式的物件的取代參照(如果沒有給定模式,則列出所有取代參照)。在沒有引數的情況下輸入 "git replace" 也會列出所有取代參照。

--format=<格式>

在列出時,使用指定的 <格式>,可以是 shortmediumlong 的其中一種。如果省略,則格式預設為 short

格式

可以使用以下格式

  • short:<被取代的 sha1>

  • medium:<被取代的 sha1> → <取代的 sha1>

  • long:<被取代的 sha1> (<被取代的類型>) → <取代的 sha1> (<取代的類型>)

建立取代物件

git-hash-object[1]git-rebase[1]git-filter-repo 等其他 git 命令可用於從現有物件建立取代物件。--edit 選項也可以與 git replace 一起使用,以透過編輯現有物件來建立取代物件。

如果您想要取代一連串提交中的許多 blob、樹狀結構或提交,您可能只想建立一個取代提交字串,然後只使用取代提交字串頂端的提交來取代目標提交字串頂端的提交。

錯誤

比較被取代的 blob 或樹狀結構與取代它們的 blob 或樹狀結構將無法正常運作。而且使用 git reset --hard 回到被取代的提交會將分支移動到取代提交,而不是被取代的提交。

使用 git rev-list 時,可能會出現與待處理物件相關的其他問題。

GIT

屬於 git[1] 套件的一部分

scroll-to-top