設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.44.1 → 2.52.0 無更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 無更改
-
2.43.0
2023-11-20
- 2.24.1 → 2.42.4 無更改
-
2.24.0
2019-11-04
- 2.18.1 → 2.23.4 無更改
-
2.18.0
2018-06-21
- 2.10.5 → 2.17.6 無變更
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 無變更
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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>,它可以是short、medium和long之一。如果省略,格式預設為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時可能存在其他問題。