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

Re: Force Confirmation for Dropping Changed Lines

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 26, 2017, 02:32 UTC
Message-ID
<xmqqd1fa7dqf.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<CA+P7+xocc==-8ad-OVTahMDABA0-spDPEw05JTHopfO7Ovj2RQ@mail.gmail.com>
Jacob Keller <jacob.keller@gmail.com> writes:
> Setting the merge driver to "unset" will do what you want, but it
> would leave the current branch as the tentative answer and doesn't
> actually make it easy to resolve properly. That would only require
> putting "pom.xml merge=unset" in the .gitattributes file.

Where did you get that "unset" from? If that is this paragraph in Documentation/gitattributes.txt:

    Unset::
            Take the version from the current branch as the
            tentative merge result, and declare that the merge has
            conflicts.  This is suitable for binary files that do
            not have a well-defined merge semantics.

you'd need to read the beginning of the file to learn how to declare that an attribute is Unset for the path. merge=unset is setting it to a string value, i.e. you are doing

    String::
            3-way merge is performed using the specified custom
            merge driver.  The built-in 3-way merge driver can be
            explicitly specified by asking for "text" driver; the
            built-in "take the current branch" driver can be
            requested with "binary".

instead, specifying a custom merge driver "unset", which would require something like

    [merge "unset"]
            name = feel-free merge driver
            driver = filfre %O %A %B %L %P
            recursive = binary
in your configuration file.
> That might be what you want, but it doesn't actually try to update the
> file during the merge so you'd have to hand-fix it yourself.
I think you should be able to do something like
	$ cat >$HOME/bin/fail-3way <<\EOF
	#!/bin/sh
	git merge-file "$@"
	exit 1
	EOF
	$ chmod +x $HOME/bin/fail-3way
	$ cat >>$HOME/.gitconfig <<\EOF
	[merge "fail"]
		name = always fail 3-way merge
		driver = $HOME/bin/fail-3way %A %O %B
		recursive = text
	EOF
	$ echo pom.xml merge=fail >>.gitattributes

to define a custom merge driver whose name is "fail", that runs the fail-3way program, which runs the bog standard 3-way merge we use (so that it will do the best-effort textual merge) but always return with a non-zero status to signal that the result is conflicting and needs manual resolution.

Previous: Jacob KellerNext: Jacob Keller
Message 8 of 11 in “Force Confirmation for Dropping Changed Lines”
  1. Hilco WijbengaJan 25, 2017
  2. Jacob KellerJan 25, 2017
  3. Hilco WijbengaJan 25, 2017
  4. Jacob KellerJan 25, 2017
  5. Junio C HamanoJan 25, 2017
  6. Hilco WijbengaJan 25, 2017
  7. Jacob KellerJan 26, 2017
  8. Junio C HamanoJan 26, 2017
  9. Jacob KellerJan 26, 2017
  10. Hilco WijbengaJan 26, 2017
  11. Junio C HamanoJan 26, 2017

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.