Git mergetool generates unwanted .orig files

GitVersion Control

Git Problem Overview


When I do a merge conflict resolution with Kdiff3 (and other merge tool I tried) I noticed that on resolution a *.orig file is created. Is there a way for it to not create that extra file?

Git Solutions


Solution 1 - Git

A possible solution from git config:

git config --global mergetool.keepBackup false

> After performing a merge, the original file with conflict markers can be saved as a file with a .orig extension.
If this variable is set to false then this file is not preserved.
Defaults to true (i.e. keep the backup files).

The alternative being not adding or ignoring those files, as suggested in this gitguru article,

> git mergetool saves the merge-conflict version of the file with a “.orig” suffix.
Make sure to delete it before adding and committing the merge or add *.orig to your .gitignore.

Berik suggests in the comments to use:

find . -name \*.orig 
find . -name \*.orig -delete

Charles Bailey advises in his answer to be aware of internal diff tool settings which could also generate those backup files, no matter what git settings are.

  • kdiff3 has its own settings (see "Directory merge" in its manual).
  • other tools like WinMerge can have their own backup file extension (WinMerge: .bak, as mentioned in its manual).

So you need to reset those settings as well.

Solution 2 - Git

You have to be a little careful with using kdiff3 as while git mergetool can be configured to save a .orig file during merging, the default behaviour for kdiff3 is to also save a .orig backup file independently of git mergetool.

You have to make sure that mergetool backup is off:

git config --global mergetool.keepBackup false

and also that kdiff3's settings are set to not create a backup:

Configure/Options => Directory Merge => Backup Files (*.orig)

Solution 3 - Git

To be clear, the correct git command is:

git config --global mergetool.keepBackup false

Both of the other answers have typos in the command line that will cause it to fail or not work correctly.

Solution 4 - Git

The option to save the .orig file can be disabled by configuring KDiff3

KDiff3 Backup file .orig option

Solution 5 - Git

I use this to clean up all files ending in ".orig":

function git-clean-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" " | xargs rm -r
}

If you are a scaredy-cat :) you could leave the last part off just to list them (or leave off the -r if you want to approve each delete):

function git-show-orig {
    git status -su | grep -e"\.orig$" | cut -f2 -d" "
}

Solution 6 - Git

I simply use the command

git clean -n *.orig

check to make sure only file I want remove are listed then

git clean -f *.orig

Solution 7 - Git

Besides the correct answers offered as long term solutions, you can use git to remove all unnecessary files once for you with the git clean -f command but use git clean --dry-run first to ensure nothing unintended would happen.

This has the benefit of using tested built in functionality of Git over scripts specific to your OS/shell to remove the files.

Solution 8 - Git

Or just add

*.orig

to your global gitignore

Solution 9 - Git

git config --global mergetool.keepBackup false

This should work for Beyond Compare (as mergetool) too

Solution 10 - Git

If you're working on a Windows machine - you can turn off backups with this command

git config --global mergetool.keepBackup false

If you don't want to do that, you can easily delete all the .orig files using this powershell command

ls -Recurse C:\path\to\repository\*.orig | rm

Solution 11 - Git

Windows:

  1. in File Win/Users/HOME/.gitconfig set mergetool.keepTemporaries=false
  2. in File git/libexec/git-core/git-mergetool, in the function cleanup_temp_files() add rm -rf -- "$MERGED.orig" within the else block.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAkeemView Question on Stackoverflow
Solution 1 - GitVonCView Answer on Stackoverflow
Solution 2 - GitCB BaileyView Answer on Stackoverflow
Solution 3 - GitJohnView Answer on Stackoverflow
Solution 4 - Gitxx1xxView Answer on Stackoverflow
Solution 5 - GitkghastieView Answer on Stackoverflow
Solution 6 - GitRodneykView Answer on Stackoverflow
Solution 7 - GithaleonjView Answer on Stackoverflow
Solution 8 - Gitcd491415View Answer on Stackoverflow
Solution 9 - GitAtulView Answer on Stackoverflow
Solution 10 - GitKellen StuartView Answer on Stackoverflow
Solution 11 - GitmichalView Answer on Stackoverflow