git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv5 23/23] Provide 'git merge --abort' as a synonym to 'git reset --merge'

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 25, 2010, 01:32 UTC
Message-ID
<20101025013217.GA25355@burratino>
In-Reply-To
<1287965333-5099-24-git-send-email-johan@herland.net>
Johan Herland wrote:
Show 9 quoted lines
> --- a/Documentation/git-merge.txt
> +++ b/Documentation/git-merge.txt
> @@ -13,6 +13,7 @@ SYNOPSIS
>                                                     However, if there
> +were uncommitted changes when the merge started (and these changes
> +did not interfere with the merge itself, otherwise the merge would
> +have refused to start), and then additional modifications were made
> +to these uncommitted changes, 'git merge --abort' will not be able
> +reconstruct the original (pre-merge) uncommitted changes. Therefore:
I do not find this clear.  Could you give an example?
References:
 http://thread.gmane.org/gmane.comp.version-control.git/136356/focus=136773
 http://thread.gmane.org/gmane.comp.version-control.git/151799/focus=151812
Show 7 quoted lines
> +--abort::
> +	Abort the current conflict resolution process, and
> +	reconstruct the pre-merge state.
> ++
> +Any uncommitted worktree changes present when the merge started,
> +will only be preserved if they have not been further modified
> +since the merge started.
Ah, maybe I see: is the problem this procedure?
 1. Make changes to file foo.c (without staging them).
 2. Try a merge (which cannot touch foo.c, or the merge would have
    been aborted automatically) which fails with conflicts.
 3. As a result of semantic conflicts, make some changes to foo.c.
 4. Wish to return to the state from the end of step 1.
But I find the following more likely:
 1. Make changes to file foo.c (without staging them).
 2. Try a merge (which cannot touch foo.c, or the merge would have
    been aborted automatically) which fails with conflicts.
 3. Walk away in disgust.
 4. Return, make some more changes to foo.c.
 5. Notice the merge in progress --- oh! --- and abort it.
Show 13 quoted lines
> --- a/t/t7609-merge-abort.sh
> +++ b/t/t7609-merge-abort.sh
> @@ -3,95 +3,271 @@
>  test_description='test aborting in-progress merges'
>  . ./test-lib.sh
>  
> +# Set up repo with conflicting and non-conflicting branches:
> +#
> +# master1---master2---foo_foo  <-- master
> +#        \
> +#         --clean1             <-- clean_branch
> +#                 \
> +#                  --foo_bar   <-- conflict_branch
[It might be nice to include this in test_description for use by
 "./t7609-merge-abort.sh --help".]
> +# - dirty worktree before merge matches contents on remote branch
Or maybe this was the example.  Here was Junio's explanation of it:
| It will discard the change, the one you independently picked up, but the
| change agreed with what was done by the the trash history that you are
| cancelling merge with.  You wouldn't miss losing the same change as in
| that trash history.

In other words, if the change is also on a remote branch that you want not to merge with anyway, it is not likely to be terribly important to preserve it in the local tree. (This is a trade-off between convenience in two different scenarios.)

Hope that helps (sorry for the ramble).
Previous: Johan HerlandNext: Johan Herland
Message 27 of 31 in “[PATCHv5 00/23] git notes merge”
  1. Johan HerlandOct 25, 2010
  2. 01/23 notes.c: Hexify SHA1 in die() message from init_notes()Johan Herland, Oct 25, 2010
  3. 02/23 (trivial) notes.h: Minor documentation fixes to copy_notes()Johan Herland, Oct 25, 2010
  4. 03/23 notes.h: Make default_notes_ref() available in notes APIJohan Herland, Oct 25, 2010
  5. 04/23 notes.c: Reorder functions in preparation for next commitJohan Herland, Oct 25, 2010
  6. 05/23 notes.h/c: Allow combine_notes functions to remove notesJohan Herland, Oct 25, 2010
  7. 06/23 notes.h/c: Propagate combine_notes_fn return value to add_note() and beyondJohan Herland, Oct 25, 2010
  8. 07/23 (trivial) t3303: Indent with tabs instead of spaces for consistencyJohan Herland, Oct 25, 2010
  9. 08/23 notes.c: Use two newlines (instead of one) when concatenating notesJohan Herland, Oct 25, 2010
  10. 09/23 builtin/notes.c: Split notes ref DWIMmery into a separate functionJohan Herland, Oct 25, 2010
  11. 10/23 git notes merge: Initial implementation handling trivial merges onlyJohan Herland, Oct 25, 2010
  12. 11/23 builtin/notes.c: Refactor creation of notes commits.Johan Herland, Oct 25, 2010
  13. 12/23 git notes merge: Handle real, non-conflicting notes mergesJohan Herland, Oct 25, 2010
  14. 13/23 git notes merge: Add automatic conflict resolvers (ours, theirs, union)Johan Herland, Oct 25, 2010
  15. 14/23 Documentation: Preliminary docs on 'git notes merge'Johan Herland, Oct 25, 2010
  16. 15/23 git notes merge: Manual conflict resolution, part 1/2Johan Herland, Oct 25, 2010
  17. 16/23 git notes merge: Manual conflict resolution, part 2/2Johan Herland, Oct 25, 2010
  18. 17/23 git notes merge: List conflicting notes in notes merge commit messageJohan Herland, Oct 25, 2010
  19. 18/23 git notes merge: --commit should fail if underlying notes ref has movedJohan Herland, Oct 25, 2010
  20. 19/23 git notes merge: Add another auto-resolving strategy: "cat_sort_uniq"Johan Herland, Oct 25, 2010
  21. 20/23 git notes merge: Add testcases for merging notes trees at different fanoutsJohan Herland, Oct 25, 2010
  22. Junio C HamanoOct 29, 2010
  23. Johan HerlandNov 1, 2010
  24. 21/23 Provide 'git notes get-ref' to easily retrieve current notes refJohan Herland, Oct 25, 2010
  25. 22/23 cmd_merge(): Parse options before checking MERGE_HEADJohan Herland, Oct 25, 2010
  26. 23/23 Provide 'git merge --abort' as a synonym to 'git reset --merge'Johan Herland, Oct 25, 2010
  27. Jonathan NiederOct 25, 2010
  28. Johan HerlandOct 25, 2010
  29. Johan HerlandOct 26, 2010
  30. 22/23 cmd_merge(): Parse options before checking MERGE_HEADJohan Herland, Oct 26, 2010
  31. 23/23 Provide 'git merge --abort' as a synonym to 'git reset --merge'Johan Herland, Oct 26, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.