Home > other >  Find which files conflict before merge?
Find which files conflict before merge?

Time:01-28

If we git pull and see:

git pull
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.

then we can simply git pull --merge1to merge the remote into the local and see the conflicting files with git diff --name-only --diff-filter=U.

But suppose we wish to see which files conflict before the pull succeeds, that is, before any merge has occurred.

To be very clear, there's changes on the remote, there's changes on my local, and I want to see what the conflicts are before merging the two.

1Sorry, this is wrong, but it's not important. However I'll find the right command and update shortly.

CodePudding user response:

I don't think this is a complete answer, but based on advice from @RomainValeri and @torek, here's what I attempted:

First, get the remote changes without trying to merge them as pull does:

git fetch

Now you have the changes on the remote, take a look at them with this:

git diff HEAD @{u}

(note: ^^ this code came from @RomainValeri, I wish I could say I knew what it does - I can confirm that it works and shows the diff)

Then, if and when you're happy, you can merge like so:

git merge

(note you'll still have to deal with any merge conflicts, but that's another story...)

CodePudding user response:

stevec's answer explains how to preview the merge before it occurs, which is a good option.

Another option is to simply perform the merge, and undo it if you do not like the conflicts.

To do this, run git pull as usual. If there should be a conflict and you do not feel like resolving it right now, you can simply run

git merge --abort

and you will be back to the old state of your working directory. Note that this will only work cleanly if you have no uncommitted changes when pulling - but pulling into an unclean working directory is not a good idea anyway, so just commit (or stash) before pulling.

  •  Tags:  
  • Related