設定和配置
獲取和建立專案
基本快照
分支與合併
- branch (分支)
- checkout (檢出)
- switch (切換)
- merge (合併)
- mergetool (合併工具)
- log (日誌)
- stash (暫存)
- tag (標籤)
- worktree (工作樹)
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes (git屬性)
- 命令列介面約定
- 日常Git
- 常見問題 (FAQ)
- 術語表
- 鉤子
- gitignore (git忽略)
- gitmodules (git模組)
- 修訂
- 子模組
- 教程
- 工作流程
- 所有指南...
管理
- clean (清理)
- gc (垃圾回收)
- fsck (檔案系統檢查)
- reflog (引用日誌)
- filter-branch (過濾分支)
- instaweb (快速web)
- archive (歸檔)
- bundle (捆綁)
底層命令
- cat-file (檢視檔案內容)
- check-ignore (檢查忽略)
- checkout-index (檢出索引)
- commit-tree (提交樹)
- count-objects (統計物件)
- diff-index (差異索引)
- for-each-ref (遍歷引用)
- hash-object (計算物件雜湊)
- ls-files (列出檔案)
- ls-tree (列出樹)
- merge-base (合併基礎)
- read-tree (讀取樹)
- rev-list (反向列表)
- rev-parse (反向解析)
- show-ref (顯示引用)
- symbolic-ref (符號引用)
- update-index (更新索引)
- update-ref (更新引用)
- verify-pack (驗證打包)
- write-tree (寫入樹)
- 2.44.1 → 2.50.1 無更改
-
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
,否則 替換 引用必須尚未存在。
對被替換物件和替換物件沒有其他限制。合併提交可以被非合併提交替換,反之亦然。
替換引用將預設被所有 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>
-
以互動方式編輯物件的原始內容。
- --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、樹或提交,您可能只想建立一系列替換提交,然後只用替換系列提交的尖端提交來替換目標系列提交的尖端提交。
BUG
比較已被替換的 blob 或樹與替換它們的 blob 或樹將無法正常工作。並且使用 git
reset
--hard
返回到已替換的提交會將分支移動到替換提交而不是被替換提交。
使用 git rev-list 時,可能還會出現與待定物件相關的其他問題。