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

[PATCH 00/12] Towards a better merge resolution support

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 30, 2008, 00:42 UTC
Message-ID
<1220056963-2352-1-git-send-email-gitster@pobox.com>

This consists of two loosely related topics on improving conflicted merge resolution support.

The early part of the series is what you already saw. In addition to recording a conflicted merge in the RCS merge style we have traditionally used, this allows you to optionally use "diff3 -m" style. The difference is that the latter format shows the part from the common ancestor that corresponds to the parts both sides modified to cause the conflict, in addition to the changes done on each side. This can be chosen by setting a configuration variable. Rerere mechanism is updated to understand this new format as well, and conflicts from either formats interoperate well, because rerere mechanism only records and uses the changes made on each side, not what was in the common ancestor.

The last four patches are to "git checkout" that checks things out of the index. When resolving conflicts, sometimes you would screw up the state of the working tree so badly that you would wish to redo the merge from the beginning for one file, without having to redo the whole merge. Some other times, you already know changes made on one side already solves everything the other side attempted to do, and would want to take the change from that side as a whole. New options supported by "git checkout" when checking out from the index for these purposes are:

 * git checkout -m -- path
   This recreates the merge using information staged in stages 1/2/3;
 
 * git checkout --ours -- path
   This writes 'our' version (stage #2) out for the path to the working
   tree;
 * git checkout --theirs -- path
   This writes 'their' version (stage #3) out for the path to the working
   tree;

None of these operations mark the path resolved. They are to help you prepare the working tree into a shape suitable as the resolution, and you will still conclude it with "git add path".

Junio C Hamano (12):
  xdl_fill_merge_buffer(): separate out a too deeply nested function
  xdiff-merge: optionally show conflicts in "diff3 -m" style
  xmerge.c: minimum readability fixups
  xmerge.c: "diff3 -m" style clips merge reduction level to EAGER or
    less
  rerere.c: use symbolic constants to keep track of parsing states
  rerere: understand "diff3 -m" style conflicts with the original
  merge.conflictstyle: choose between "merge" and "diff3 -m" styles
  git-merge-recursive: learn to honor merge.conflictstyle
  checkout: do not check out unmerged higher stages randomly
  checkout: allow ignoring unmerged paths when checking out of the
    index
  checkout --ours/--theirs
  checkout -m: recreate merge when checking out of unmerged index
 Documentation/config.txt  |    8 ++
 builtin-checkout.c        |  206 +++++++++++++++++++++++++++++++++++----
 builtin-merge-file.c      |   17 +++-
 builtin-merge-recursive.c |    2 +-
 ll-merge.c                |   16 +++-
 rerere.c                  |   29 ++++--
 t/t6023-merge-file.sh     |   44 +++++++++
 t/t7201-co.sh             |  133 +++++++++++++++++++++++++
 xdiff-interface.c         |   20 ++++
 xdiff-interface.h         |    2 +
 xdiff/xdiff.h             |    6 +
 xdiff/xmerge.c            |  237 +++++++++++++++++++++++++++++++--------------
 12 files changed, 612 insertions(+), 108 deletions(-)
Next: Junio C Hamano
Message 1 of 26 in “Towards a better merge resolution support”
  1. 00/12 Towards a better merge resolution supportJunio C Hamano, Aug 30, 2008
  2. 01/12 xdl_fill_merge_buffer(): separate out a too deeply nested functionJunio C Hamano, Aug 30, 2008
  3. 02/12 xdiff-merge: optionally show conflicts in "diff3 -m" styleJunio C Hamano, Aug 30, 2008
  4. 03/12 xmerge.c: minimum readability fixupsJunio C Hamano, Aug 30, 2008
  5. 04/12 xmerge.c: "diff3 -m" style clips merge reduction level to EAGER or lessJunio C Hamano, Aug 30, 2008
  6. 05/12 rerere.c: use symbolic constants to keep track of parsing statesJunio C Hamano, Aug 30, 2008
  7. 06/12 rerere: understand "diff3 -m" style conflicts with the originalJunio C Hamano, Aug 30, 2008
  8. 07/12 merge.conflictstyle: choose between "merge" and "diff3 -m" stylesJunio C Hamano, Aug 30, 2008
  9. 08/12 git-merge-recursive: learn to honor merge.conflictstyleJunio C Hamano, Aug 30, 2008
  10. 09/12 checkout: do not check out unmerged higher stages randomlyJunio C Hamano, Aug 30, 2008
  11. 10/12 checkout: allow ignoring unmerged paths when checking out of the indexJunio C Hamano, Aug 30, 2008
  12. 11/12 checkout --ours/--theirsJunio C Hamano, Aug 30, 2008
  13. 12/12 checkout -m: recreate merge when checking out of unmerged indexJunio C Hamano, Aug 30, 2008
  14. Johannes SchindelinAug 30, 2008
  15. Johannes SchindelinAug 30, 2008
  16. Johannes SchindelinAug 30, 2008
  17. Junio C HamanoAug 30, 2008
  18. Johannes SchindelinAug 30, 2008
  19. Johannes SchindelinAug 30, 2008
  20. Alex RiesenSep 1, 2008
  21. Alex RiesenSep 1, 2008
  22. Abhijit Menon-SenSep 1, 2008
  23. Thomas RastSep 1, 2008
  24. Junio C HamanoSep 1, 2008
  25. Alex RiesenSep 1, 2008
  26. Junio C HamanoSep 1, 2008

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.