On my branch I had some files in .gitignore
On a different branch those files are not.
I want to merge the different branch into mine, and I don't care if those files are no longer ignored or not.
Unfortunately I get this:
The following untracked working tree files would be overwritten by merge
How would I modify my pull command to overwrite those files, without me having to find, move or delete those files myself?
In addition to the accepted answer you can of course remove the files if they are no longer needed by specifying the file:
Remember to run it with the -n flag first if you would like to see which files git clean will remove. Note that these files will be deleted. In my case I didn't care about them anyway, so that was a better solution for me.
Remove all untracked files:
How this answer differ from other answers?
The method presented here removes only files that would be overwritten by merge. If you have other untracked (possibly ignored) files in the directory this method won't remove them.
The solution
This snippet will extract all untracked files that would be overwritten by
git pull
and delete them.and then just do:
This is not git porcelain command so always double check what it would do with:
Explanation - because one liners are scary:
Here's a breakdown of what it does:
git pull 2>&1
- capturegit pull
output and redirect it all to stdout so we can easily capture it withgrep
.grep -E '^\s
- the intent is to capture the list of the untracked files that would be overwritten bygit pull
. The filenames have a bunch of whitespace characters in front of them so we utilize it to get them.cut -f2-
- remove whitespace from the beginning of each line captured in 2.xargs -I {} rm -rf "{}"
- usxargs
to iterate over all files, save their name in "{}" and callrm
for each of them. We use-rf
to force delete and remove untracked directories.It would be great to replace steps 1-3 with porcelain command, but I'm not aware of any equivalent.
The only commands that worked for me were:
If you consider using the
-f
flag you might first run it as a dry-run. Just that you know upfront what kind of interesting situation you will end up next ;-PThe problem is that you are not tracking the files locally but identical files are tracked remotely so in order to "pull" your system would be forced to overwrite the local files which are not version controlled.
Try running
This will track all files, remove all of your local changes to those files, and then get the files from the server.