設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 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.35.1 → 2.42.4 無更改
-
2.35.0
2022-01-24
- 2.7.6 → 2.34.8 無變更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 無更改
-
2.0.5
2014-12-17
概要
git merge-file [-L <current-name> [-L <base-name> [-L <other-name>]]] [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>] [--[no-]diff3] [--object-id] <current> <base> <other>
描述
給定三個檔案<current>、<base>和<other>,git merge-file會將從<base>到<other>的所有變更合併到<current>中。結果通常會寫入<current>。git merge-file對於將對原始檔案的獨立修改進行合併非常有用。假設<base>是原始檔案,而<current>和<other>都是對<base>的修改,那麼git merge-file將合併這兩處變更。
如果<current>和<other>在共同的行段中都有變更,則會發生衝突。如果發現衝突,git merge-file通常會輸出警告,並用包含<<<<<<<和>>>>>>>標記的行將衝突括起來。典型的衝突會是這樣:
<<<<<<< A lines in file A ======= lines in file B >>>>>>> B
如果存在衝突,使用者應編輯結果並刪除其中一個備選項。然而,當--ours
、--theirs
或--union
選項生效時,這些衝突將分別透過優先保留來自<current>的行、來自<other>的行或來自兩者的行來解決。衝突標記的長度可以透過--marker-size
選項指定。
如果指定了--object-id
,則行為完全相同,只是合併的內容不再指定為檔案,而是指定為引用 blob 的物件 ID 列表。
此程式的退出值在出錯時為負,否則為衝突數量(如果衝突數量超過 127,則截斷為 127)。如果合併乾淨,退出值為 0。
git merge-file旨在成為 RCS merge的最小克隆;也就是說,它實現了git[1]所需的所有 RCS merge功能。
選項
- --object-id
-
將要合併的內容指定為當前倉庫中的 blob,而不是檔案。在這種情況下,操作必須在有效的倉庫內進行。
如果指定了
-p
選項,則合併後的檔案(包括衝突,如果有的話)將正常輸出到標準輸出;否則,合併後的檔案將寫入物件儲存,並將其 blob 的物件 ID 寫入標準輸出。 - -L <標籤>
-
此選項最多可指定三次,用於指定在衝突報告中替代相應檔名的標籤。也就是說,
git
merge-file
-L
x
-L
y
-L
z
a
b
c
生成的輸出看起來像是來自檔案 x、y 和 z,而不是檔案 a、b 和 c。 - -p
-
將結果傳送到標準輸出,而不是覆蓋<current>。
- -q
-
靜默模式;不警告衝突。
- --diff3
-
以 "diff3" 樣式顯示衝突。
- --zdiff3
-
以 "zdiff3" 樣式顯示衝突。
- --ours
- --theirs
- --union
-
不將衝突留在檔案中,而是優先保留我們(或他們或兩者)的行來解決衝突。
- --diff-algorithm={patience|minimal|histogram|myers}
-
合併時使用不同的 diff 演算法。當前預設是 "myers",但選擇更近的演算法(如 "histogram")有助於避免因不重要的匹配行(例如來自不同函式的括號)導致的錯誤合併。另請參閱 git-diff[1]
--diff-algorithm
。
示例
git
merge-file
README.my
README
README.upstream
-
將 README.my 和 README.upstream 自 README 以來的變更合併,並嘗試合併它們,然後將結果寫入 README.my。
git
merge-file
-L
a
-L
b
-L
c
tmp/a123
tmp/b234
tmp/c345
-
合併 tmp/a123 和 tmp/c345 與基礎檔案 tmp/b234,但使用標籤
a
和c
代替tmp/a123
和tmp/c345
。 git
merge-file
-p
--object-id
abc1234
def567
890abcd
-
將 blob abc1234 和 890abcd 自 def567 以來的變更合併,並嘗試合併它們,然後將結果寫入標準輸出。