簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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,否則 替換 引用必須尚未存在。

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

替換引用將預設被所有 Git 命令使用,除了那些執行可達性遍歷的命令(prune、pack transfer 和 fsck)。

可以透過在 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 <object>

以互動方式編輯物件的原始內容。 的現有內容會被美觀地列印到一個臨時檔案,然後啟動編輯器編輯該檔案,結果會被解析以建立與 型別相同的新物件。然後會建立一個替換引用,用新建立的物件替換 。有關如何選擇編輯器的詳細資訊,請參閱 git-var[1]

--raw

編輯時,提供原始物件內容而不是美觀列印的內容。目前這隻影響樹物件,它們將以二進位制形式顯示。這更難操作,但在修復因損壞而無法美觀列印的樹物件時可能會有幫助。請注意,您可能需要配置編輯器以乾淨地讀取和寫入二進位制資料。

--graft <commit> [<parent>…​]

建立一個嫁接提交。將建立一個與 <commit> 內容相同的新提交,但其父提交將是 [<parent>…​] 而不是 <commit> 的父提交。然後會建立一個替換引用,用新建立的提交替換 <commit>。使用 --convert-graft-file 來轉換 $GIT_DIR/info/grafts 檔案並使用替換引用。

--convert-graft-file

$GIT_DIR/info/grafts 中的所有條目建立嫁接提交,並在成功後刪除該檔案。目的是幫助使用者從現在已棄用的嫁接檔案過渡。

-l <pattern>
--list <pattern>

列出與給定模式匹配(如果未給定模式則列出所有)的替換引用。不帶引數鍵入 "git replace" 也會列出所有替換引用。

--format=<format>

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

格式

可用的格式如下:

  • short: <replaced-sha1>

  • medium: <replaced-sha1> → <replacement-sha1>

  • long: <replaced-sha1> (<replaced-type>) → <replacement-sha1> (<replacement-type>)

建立替換物件

git-hash-object[1]git-rebase[1]git-filter-repo 等 Git 命令可用於從現有物件建立替換物件。git replace 也可以使用 --edit 選項,透過編輯現有物件來建立替換物件。

如果您想替換許多屬於一系列提交的 blob、樹或提交,您可能只想建立一系列替換提交,然後只用替換系列提交的尖端提交來替換目標系列提交的尖端提交。

BUG

比較已被替換的 blob 或樹與替換它們的 blob 或樹將無法正常工作。並且使用 git reset --hard 返回到已替換的提交會將分支移動到替換提交而不是被替換提交。

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

Git

Git[1] 套件的一部分

scroll-to-top