зеркало из https://github.com/microsoft/git.git
git log -p -m: document -m and honor --first-parent
git log -p -m is used to show one merge entry per parent, with an appropriate diff; this can be useful when examining histories where full set of changes introduced by a merged branch is interesting, not only the conflicts. This patch properly documents the -m switch, which has so far been mentioned only as a fairly special diff-tree flag. It also makes the code show full patch entry only for the first parent when --first-parent is used. Thus: git log -p -m --first-parent will show the history from the "main branch perspective", while also including full diff of changes introduced by other merged in branches. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
8051a03061
Коммит
88d9d45d07
|
@ -56,7 +56,8 @@ combined diff format
|
|||
|
||||
"git-diff-tree", "git-diff-files" and "git-diff" can take '-c' or
|
||||
'--cc' option to produce 'combined diff'. For showing a merge commit
|
||||
with "git log -p", this is the default format.
|
||||
with "git log -p", this is the default format; you can force showing
|
||||
full diff with the '-m' option.
|
||||
A 'combined diff' format looks like this:
|
||||
|
||||
------------
|
||||
|
|
|
@ -118,6 +118,15 @@ git log master --not --remotes=*/master::
|
|||
Shows all commits that are in local master but not in any remote
|
||||
repository master branches.
|
||||
|
||||
git log -p -m --first-parent::
|
||||
|
||||
Shows the history including change diffs, but only from the
|
||||
"main branch" perspective, skipping commits that come from merged
|
||||
branches, and showing full diffs of changes introduced by the merges.
|
||||
This makes sense only when following a strict policy of merging all
|
||||
topic branches when staying on a single integration branch.
|
||||
|
||||
|
||||
Discussion
|
||||
----------
|
||||
|
||||
|
|
|
@ -108,8 +108,8 @@ options may be given. See linkgit:git-diff-files[1] for more options.
|
|||
|
||||
-c::
|
||||
|
||||
This flag changes the way a merge commit is displayed. It shows
|
||||
the differences from each of the parents to the merge result
|
||||
With this option, diff output for a merge commit
|
||||
shows the differences from each of the parents to the merge result
|
||||
simultaneously instead of showing pairwise diff between a parent
|
||||
and the result one at a time. Furthermore, it lists only files
|
||||
which were modified from all parents.
|
||||
|
@ -121,6 +121,15 @@ options may be given. See linkgit:git-diff-files[1] for more options.
|
|||
the parents have only two variants and the merge result picks
|
||||
one of them without modification.
|
||||
|
||||
-m::
|
||||
|
||||
This flag makes the merge commits show the full diff like
|
||||
regular commits; for each merge parent, a separate log entry
|
||||
and diff is generated. An exception is that only diff against
|
||||
the first parent is shown when '--first-parent' option is given;
|
||||
in that case, the output represents the changes the merge
|
||||
brought _into_ the then-current branch.
|
||||
|
||||
-r::
|
||||
|
||||
Show recursive diffs.
|
||||
|
|
10
log-tree.c
10
log-tree.c
|
@ -514,6 +514,16 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
|||
return 0;
|
||||
else if (opt->combine_merges)
|
||||
return do_diff_combined(opt, commit);
|
||||
else if (opt->first_parent_only) {
|
||||
/*
|
||||
* Generate merge log entry only for the first
|
||||
* parent, showing summary diff of the others
|
||||
* we merged _in_.
|
||||
*/
|
||||
diff_tree_sha1(parents->item->object.sha1, sha1, "", &opt->diffopt);
|
||||
log_tree_diff_flush(opt);
|
||||
return !opt->loginfo;
|
||||
}
|
||||
|
||||
/* If we show individual diffs, show the parent info */
|
||||
log->parent = parents->item;
|
||||
|
|
Загрузка…
Ссылка в новой задаче