2

git merge master --no-commit在一个分支中运行 a ,给出的唯一输出是:

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 回答