2

git merge master --no-commitブランチで実行しましたが、与えられた唯一の出力は次のとおりです。

Auto-merging path/to/file
Automatic Merge went well; stopped before committing as requested

ただし、git diff HEAD --name-status約 15 個のファイルが変更された ('M' で始まる) ファイルと 3 つのファイルが追加された ('A' で始まる) ことを示しています。マージで変更されたすべてのファイルは「自動マージ」と見なされませんか? では、この特定のファイルの何が特別で、「自動マージ」として出力され、残りは出力されないのでしょうか?


詳細情報(これはマージをコミットする前です):

$ git log --oneline --graph --decorate  --all
* ae3f058 (master) synced code from another source.
| * 3bd4147 (HEAD, branchA) blah blah blah
| * f6513f6 random message
| * fcbe65e more messages from commit history
| * 6bc99e2 I like green eggs and ham
|/
| * 1824723 (branchB) This is some other, unrelated branch.
|/
* 5a98fac some stuff right before branching
* 40b05f1 initial commit.
4

1 に答える 1

1

そのファイルとそのファイルだけがリストされた理由は、それが両方のブランチで変更された唯一のファイルだからです。他のすべてのファイルについては、どちらか一方が選択されただけで (「早送り」)、アルゴリズム的な意味で真にマージされることはありませんでした。

これが私がそれを理解した方法です(これはマージをコミットする前に行われました):

$ git merge-base HEAD MERGE_HEAD
5a12345
$ git diff HEAD 5a12345 --name-only > files_changed_in_HEAD
$ git diff MERGE_HEAD 5a12345 --name-only > files_changed_in_MERGE_HEAD
$ comm -12 files_changed_in_HEAD files_changed_in_MERGE_HEAD > files_changed_in_both
$ cat files_changed_in_both
path/to/file
$ 
于 2012-12-26T20:35:02.753 に答える