Git mergetool generates unwanted .orig files
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?
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 tofalse
then this file is not preserved.
Defaults totrue
(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.
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)
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.
The option to save the .orig file can be disabled by configuring KDiff3
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" "
}