簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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,則截斷為 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,但使用標籤 ac 代替 tmp/a123tmp/c345

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

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

GIT

Git[1] 套件的一部分

scroll-to-top