diff options
author | Elijah Newren <newren@gmail.com> | 2020-02-16 00:36:40 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-02-17 02:40:42 +0300 |
commit | 2ac0d6273fa6618e1a8783e07e2363b3abba1f2a (patch) | |
tree | 7c19307064d8781db1c270dcfc5c7b2ce6e25085 /Documentation/git-rebase.txt | |
parent | 8295ed690bf1d458f80cffdc17d663eb3ba5162a (diff) |
rebase: change the default backend from "am" to "merge"
The am-backend drops information and thus limits what we can do:
* lack of full tree information from the original commits means we
cannot do directory rename detection and warn users that they might
want to move some of their new files that they placed in old
directories to prevent their becoming orphaned.[1]
* reduction in context from only having a few lines beyond those
changed means that when context lines are non-unique we can apply
patches incorrectly.[2]
* lack of access to original commits means that conflict marker
annotation has less information available.
* the am backend has safety problems with an ill-timed interrupt.
Also, the merge/interactive backend have far more abilities, appear to
currently have a slight performance advantage[3] and have room for more
optimizations than the am backend[4] (and work is underway to take
advantage of some of those possibilities).
[1] https://lore.kernel.org/git/xmqqh8jeh1id.fsf@gitster-ct.c.googlers.com/
[2] https://lore.kernel.org/git/CABPp-BGiu2nVMQY_t-rnFR5GQUz_ipyEE8oDocKeO+h+t4Mn4A@mail.gmail.com/
[3] https://public-inbox.org/git/CABPp-BF=ev03WgODk6TMQmuNoatg2kiEe5DR__gJ0OTVqHSnfQ@mail.gmail.com/
[4] https://lore.kernel.org/git/CABPp-BGh7yW69QwxQb13K0HM38NKmQif3A6C6UULEKYnkEJ5vA@mail.gmail.com/
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'Documentation/git-rebase.txt')
-rw-r--r-- | Documentation/git-rebase.txt | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 93092da3bf..fbac1cf38d 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -315,7 +315,7 @@ See also INCOMPATIBLE OPTIONS below. --merge:: Use merging strategies to rebase. When the recursive (default) merge strategy is used, this allows rebase to be aware of renames on the - upstream side. + upstream side. This is the default. + Note that a rebase merge works by replaying each commit from the working branch on top of the <upstream> branch. Because of this, when a merge @@ -683,6 +683,17 @@ accident of implementation rather than by design. Both backends should have the same behavior, though it is not clear which one is correct. +Interruptability +~~~~~~~~~~~~~~~~ + +The am backend has safety problems with an ill-timed interrupt; if the +user presses Ctrl-C at the wrong time to try to abort the rebase, the +rebase can enter a state where it cannot be aborted with a subsequent +`git rebase --abort`. The interactive backend does not appear to +suffer from the same shortcoming. (See +https://lore.kernel.org/git/20200207132152.GC2868@szeder.dev/ for +details.) + Miscellaneous differences ~~~~~~~~~~~~~~~~~~~~~~~~~ |