Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-merge-file 最後更新於 2.44.0

名稱

git-merge-file - 執行三向檔案合併

概要

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)。如果合併乾淨,則結束值為 0。

git merge-file 的設計目的是成為 RCS merge 的最小副本;也就是說,它會實作 git[1] 需要的 RCS merge 的所有功能。

選項

--object-id

將要合併的內容指定為目前儲存庫中的 blob,而不是檔案。在這種情況下,操作必須在有效的儲存庫內進行。

如果指定了 -p 選項,合併的檔案(包括任何衝突)會照常輸出到標準輸出;否則,合併的檔案會寫入物件儲存區,而其 blob 的物件 ID 會寫入標準輸出。

-L <label>

此選項最多可以指定三次,並指定要在衝突報告中取代對應檔案名稱的標籤。也就是說,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 以來,README.my 和 README.upstream 的變更,嘗試合併它們,並將結果寫入 README.my 中。

git merge-file -L a -L b -L c tmp/a123 tmp/b234 tmp/c345

將 tmp/a123 和 tmp/c345 與基礎 tmp/b234 合併,但使用標籤 ac 而不是 tmp/a123tmp/c345

git merge-file -p --object-id abc1234 def567 890abcd

合併自 def567 以來,blob abc1234 和 890abcd 的變更,嘗試合併它們,並將結果寫入標準輸出

GIT

屬於 git[1] 套件的一部分

scroll-to-top