簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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 命令都會使用替換引用。

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

互動式編輯物件的內容。將 <object> 的現有內容以美化格式列印到臨時檔案,在檔案上啟動編輯器,然後解析結果以建立與 <object> 相同型別的新物件。然後建立一個替換引用來替換 <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、tree 或 commit,您可能只想建立一個替換的提交系列,然後只用替換系列頂部的提交替換目標系列頂部的提交。

BUG

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

在使用與待處理物件相關的git rev-list時可能存在其他問題。

GIT

Git[1] 套件的一部分