mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
rev-list-options.txt: start a list for show-pulls
The explanation of the `--show-pulls` option added in commit 8d049e182e
("revision: --show-pulls adds helpful merges", 2020-04-10) consists of
several paragraphs and we use "+" throughout to tie them together in one
long chain of list continuations. Only thing is, we're not in any kind
of list, so these pluses end up being rendered literally.
The preceding few paragraphs describe `--ancestry-path` and there we
*do* have a list, since we've started one with `--ancestry-path::`. In
fact, we have several such lists for all the various history-simplifying
options we're discussing earlier in this file.
Thus, we're missing a list both from a consistency point of view and
from a practical rendering standpoint.
Let's start a list for `--show-pulls` where we start actually discussing
the option, and keep the paragraphs preceding it out of that list. That
is, drop all those pluses before the new list we're adding here.
Helped-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d2ecc46c09
commit
32f7037ab3
|
@ -581,12 +581,12 @@ option does. Applied to the 'D..M' range, it results in:
|
||||||
|
|
||||||
Before discussing another option, `--show-pulls`, we need to
|
Before discussing another option, `--show-pulls`, we need to
|
||||||
create a new example history.
|
create a new example history.
|
||||||
+
|
|
||||||
A common problem users face when looking at simplified history is that a
|
A common problem users face when looking at simplified history is that a
|
||||||
commit they know changed a file somehow does not appear in the file's
|
commit they know changed a file somehow does not appear in the file's
|
||||||
simplified history. Let's demonstrate a new example and show how options
|
simplified history. Let's demonstrate a new example and show how options
|
||||||
such as `--full-history` and `--simplify-merges` works in that case:
|
such as `--full-history` and `--simplify-merges` works in that case:
|
||||||
+
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
.-A---M-----C--N---O---P
|
.-A---M-----C--N---O---P
|
||||||
/ / \ \ \/ / /
|
/ / \ \ \/ / /
|
||||||
|
@ -595,7 +595,7 @@ such as `--full-history` and `--simplify-merges` works in that case:
|
||||||
\ / /\ /
|
\ / /\ /
|
||||||
`---X--' `---Y--'
|
`---X--' `---Y--'
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
+
|
|
||||||
For this example, suppose `I` created `file.txt` which was modified by
|
For this example, suppose `I` created `file.txt` which was modified by
|
||||||
`A`, `B`, and `X` in different ways. The single-parent commits `C`, `Z`,
|
`A`, `B`, and `X` in different ways. The single-parent commits `C`, `Z`,
|
||||||
and `Y` do not change `file.txt`. The merge commit `M` was created by
|
and `Y` do not change `file.txt`. The merge commit `M` was created by
|
||||||
|
@ -607,19 +607,19 @@ the contents of `file.txt` at `X`. Hence, `R` is TREESAME to `X` but not
|
||||||
contents of `file.txt` at `R`, so `N` is TREESAME to `R` but not `C`.
|
contents of `file.txt` at `R`, so `N` is TREESAME to `R` but not `C`.
|
||||||
The merge commits `O` and `P` are TREESAME to their first parents, but
|
The merge commits `O` and `P` are TREESAME to their first parents, but
|
||||||
not to their second parents, `Z` and `Y` respectively.
|
not to their second parents, `Z` and `Y` respectively.
|
||||||
+
|
|
||||||
When using the default mode, `N` and `R` both have a TREESAME parent, so
|
When using the default mode, `N` and `R` both have a TREESAME parent, so
|
||||||
those edges are walked and the others are ignored. The resulting history
|
those edges are walked and the others are ignored. The resulting history
|
||||||
graph is:
|
graph is:
|
||||||
+
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
I---X
|
I---X
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
+
|
|
||||||
When using `--full-history`, Git walks every edge. This will discover
|
When using `--full-history`, Git walks every edge. This will discover
|
||||||
the commits `A` and `B` and the merge `M`, but also will reveal the
|
the commits `A` and `B` and the merge `M`, but also will reveal the
|
||||||
merge commits `O` and `P`. With parent rewriting, the resulting graph is:
|
merge commits `O` and `P`. With parent rewriting, the resulting graph is:
|
||||||
+
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
.-A---M--------N---O---P
|
.-A---M--------N---O---P
|
||||||
/ / \ \ \/ / /
|
/ / \ \ \/ / /
|
||||||
|
@ -628,21 +628,21 @@ merge commits `O` and `P`. With parent rewriting, the resulting graph is:
|
||||||
\ / /\ /
|
\ / /\ /
|
||||||
`---X--' `------'
|
`---X--' `------'
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
+
|
|
||||||
Here, the merge commits `O` and `P` contribute extra noise, as they did
|
Here, the merge commits `O` and `P` contribute extra noise, as they did
|
||||||
not actually contribute a change to `file.txt`. They only merged a topic
|
not actually contribute a change to `file.txt`. They only merged a topic
|
||||||
that was based on an older version of `file.txt`. This is a common
|
that was based on an older version of `file.txt`. This is a common
|
||||||
issue in repositories using a workflow where many contributors work in
|
issue in repositories using a workflow where many contributors work in
|
||||||
parallel and merge their topic branches along a single trunk: manu
|
parallel and merge their topic branches along a single trunk: manu
|
||||||
unrelated merges appear in the `--full-history` results.
|
unrelated merges appear in the `--full-history` results.
|
||||||
+
|
|
||||||
When using the `--simplify-merges` option, the commits `O` and `P`
|
When using the `--simplify-merges` option, the commits `O` and `P`
|
||||||
disappear from the results. This is because the rewritten second parents
|
disappear from the results. This is because the rewritten second parents
|
||||||
of `O` and `P` are reachable from their first parents. Those edges are
|
of `O` and `P` are reachable from their first parents. Those edges are
|
||||||
removed and then the commits look like single-parent commits that are
|
removed and then the commits look like single-parent commits that are
|
||||||
TREESAME to their parent. This also happens to the commit `N`, resulting
|
TREESAME to their parent. This also happens to the commit `N`, resulting
|
||||||
in a history view as follows:
|
in a history view as follows:
|
||||||
+
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
.-A---M--.
|
.-A---M--.
|
||||||
/ / \
|
/ / \
|
||||||
|
@ -651,18 +651,18 @@ in a history view as follows:
|
||||||
\ / /
|
\ / /
|
||||||
`---X--'
|
`---X--'
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
+
|
|
||||||
In this view, we see all of the important single-parent changes from
|
In this view, we see all of the important single-parent changes from
|
||||||
`A`, `B`, and `X`. We also see the carefully-resolved merge `M` and the
|
`A`, `B`, and `X`. We also see the carefully-resolved merge `M` and the
|
||||||
not-so-carefully-resolved merge `R`. This is usually enough information
|
not-so-carefully-resolved merge `R`. This is usually enough information
|
||||||
to determine why the commits `A` and `B` "disappeared" from history in
|
to determine why the commits `A` and `B` "disappeared" from history in
|
||||||
the default view. However, there are a few issues with this approach.
|
the default view. However, there are a few issues with this approach.
|
||||||
+
|
|
||||||
The first issue is performance. Unlike any previous option, the
|
The first issue is performance. Unlike any previous option, the
|
||||||
`--simplify-merges` option requires walking the entire commit history
|
`--simplify-merges` option requires walking the entire commit history
|
||||||
before returning a single result. This can make the option difficult to
|
before returning a single result. This can make the option difficult to
|
||||||
use for very large repositories.
|
use for very large repositories.
|
||||||
+
|
|
||||||
The second issue is one of auditing. When many contributors are working
|
The second issue is one of auditing. When many contributors are working
|
||||||
on the same repository, it is important which merge commits introduced
|
on the same repository, it is important which merge commits introduced
|
||||||
a change into an important branch. The problematic merge `R` above is
|
a change into an important branch. The problematic merge `R` above is
|
||||||
|
@ -671,10 +671,13 @@ important branch. Instead, the merge `N` was used to merge `R` and `X`
|
||||||
into the important branch. This commit may have information about why
|
into the important branch. This commit may have information about why
|
||||||
the change `X` came to override the changes from `A` and `B` in its
|
the change `X` came to override the changes from `A` and `B` in its
|
||||||
commit message.
|
commit message.
|
||||||
|
|
||||||
|
--show-pulls::
|
||||||
|
In addition to the commits shown in the default history, show
|
||||||
|
each merge commit that is not TREESAME to its first parent but
|
||||||
|
is TREESAME to a later parent.
|
||||||
+
|
+
|
||||||
The `--show-pulls` option helps with both of these issues by adding more
|
When a merge commit is included by `--show-pulls`, the merge is
|
||||||
merge commits to the history results. If a merge is not TREESAME to its
|
|
||||||
first parent but is TREESAME to a later parent, then that merge is
|
|
||||||
treated as if it "pulled" the change from another branch. When using
|
treated as if it "pulled" the change from another branch. When using
|
||||||
`--show-pulls` on this example (and no other options) the resulting
|
`--show-pulls` on this example (and no other options) the resulting
|
||||||
graph is:
|
graph is:
|
||||||
|
|
Loading…
Reference in a new issue