2016-01-13 59 views
3

是否有任何命令在拉取後僅在git中列出自動合併文件。自動合併不會迫使我們觀看代碼。有一段時間我需要明確檢查automerged文件。如何在git中僅列出自動合併文件

Git enlists通常以三種類型混淆改變文件。新文件或舊文件刪除,自動合併和衝突。如果git內部識別automered文件,所以我只是認爲會有任何命令只列出自動合併文件。通過我想在合併提交之前獲取此列表的方式。

+0

你想要這個列表*之前*或*合併成爲合併提交之後?我還會注意到,例如,如果您從合併分支中選擇了對文件F的更改,並且在您自己的分支中沒有對F進行更改,則F不是「自動合併文件」(或至少我不會稱它爲一),但該文件中的更改可能會導致問題,這取決於其他文件(也可能不是「自動合併」)在F中使用某些內容的方式。因此,我不確定這樣的列表是多麼有用。 – torek

+0

Git enlists通常將三種類型的文件混合在一起。新文件或舊文件刪除,自動合併和衝突。如果git內部識別automered文件,所以我只是認爲會有任何命令只列出自動合併文件。通過我想在合併提交之前獲取此列表的方式。 – C2486

回答

1

爲了清楚這個答案,讓我們開始與一些定義和說明:

  • 要執行合併,混帳必須找到「合併基地」,這(非常鬆散)是「提交處當前分行和即將合併分行共享發展歷史「。
  • 您現在正在進行合併,要麼使用--no-commit要麼發生合併衝突。如果是後者,你還沒有解決這些衝突。
  • 因此,您的工作樹已準備好提交文件,但您並未實際進行提交。
  • 一旦提交,合併就有兩個父提交。其中一個是的提交,它是剛剛進行合併提交之前分支的提示。由於您尚未進行合併提交,因此您當前的HEAD提交是此分支的提示。因此,下面的短語「HEAD提交」意味着「在合併之前分支的尖端」。
  • 同時,我們還需要一個簡短的詞或短語來表示將被合併的分支(它將成爲第二個父分支)提交。我將稱之爲「入站」提交。 (我還沒有看到這個詞在其他地方,我只是做它通過一些同義詞庫條目會後。)

基於您的評論回覆,我相信你想找到有從任何改變文件HEAD commit,即那些已經從入站提交中獲得任何更改的人,無論git是否合併那些沒有發現衝突的人。

如果這是正確的,答案很簡單:

git diff --cached --name-only 

將列出它們。 (這是一個有點自git diff --cached意外的沒有--name-only顯示未合併的文件。)

你應該只想文件Git有(或認爲它有)成功合併:

git status --porcelain | awk '/^M/{ print $2 }' 

會列出這些。 (不要使用awk,也可以使用-s--short而不是--porcelain來查看git status的輸出。在這種情況下,我們查找狀態爲「已合併,準備提交」的文件。有合併衝突的文件將處於M狀態)

您可能還想將文件與其合併版本進行比較。這在中不是太難,除了在多個合併基礎的情況下(有點罕見)。不過,我會把這些細節留在這個答案中。