threads / discuss / 42608

'untracked working tree files would be overwritten by merge' on ignored files?

Subject: 'untracked working tree files would be overwritten by merge' on ignored files?

## tl;dr

3 messages between Jun 16, 2016 and Jun 16, 2016.

replies: 2people: 2as markdown or json

Andreas Krey· Jun 14, 2016, 16:07 UTC · lore
Hi all,

when I have an ignored file in my workspace, is git then also assumed not to remove it in the course of a merge?

Shouldn't it then say that the file is ignored, as it does not show up in the untracked section of git status?

Regards, Andreas
PS: Test script (will remove anything named 'tst'):
    rm -rf tst
    mkdir tst
    cd tst || exit 1
    git init
    echo '*.txt' >.gitignore
    git add .
    git commit -m initial
    git checkout -b side
    git checkout -
    date >a.txt
    git add -f a.txt
    git commit -m 'new file'
    git checkout side
    git commit -m 'nix' --allow-empty
    touch a.txt
    git status --ignored    # Shows a.txt as ignored
    git merge master        # Will complain
    git version
-- 
"Totally trivial. Famous last words."
From: Linus Torvalds <torvalds@*.org>
Date: Fri, 22 Jan 2010 07:29:21 -0800
Junio C Hamano· Jun 14, 2016, 17:06 UTC · re: Andreas Krey · lore

Re: 'untracked working tree files would be overwritten by merge' on ignored files?

Andreas Krey <a.krey@gmx.de> writes:
> when I have an ignored file in my workspace, is git
> then also assumed not to remove it in the course
> of a merge?

IIRC, untracked files are kept during merge and across checking out another branch. Files that are deliberately marked as ignored by listing them to .gitignore mechanism are considered expendable, and they will be removed as necessary.

This is because we do not have the fourth-class, "we do not want to add them to the history as tracked contents, but we do not want to lose them", aka "precious"; we only have three, i.e. "paths in the index", "path that are untracked" and "path that are ignored".

Andreas Krey· Jun 14, 2016, 21:35 UTC · re: Junio C Hamano · lore

Re: 'untracked working tree files would be overwritten by merge' on ignored files?

On Tue, 14 Jun 2016 10:06:16 +0000, Junio C Hamano wrote: ...

Show 5 quoted lines
> 
> IIRC, untracked files are kept during merge and across checking out
> another branch.  Files that are deliberately marked as ignored by
> listing them to .gitignore mechanism are considered expendable, and
> they will be removed as necessary.

Apparently not. Waitaminute - I can check out the other branch, and then the ignored file is replaced by the versioned file there, as you say.

But when I try to merge the other branch, merge complains as in $subject.

That is, 'git merge other' does not work, but 'git checkout out; git checkout -; git merge other' works because then the ignored file is removed in the first checkout and no longer in the way for the merge:

    $ git status --ignored
    On branch side
    Ignored files:
      (use "git add -f <file>..." to include in what will be committed)
	    a.txt
    nothing to commit, working directory clean
    $ git merge master
    error: The following untracked working tree files would be overwritten by merge:
	    a.txt
    Please move or remove them before you can merge.
    Aborting
    $ git checkout master
    Switched to branch 'master'
    $ git checkout -
    Switched to branch 'side'
    $ git merge master
    Merge made by the 'recursive' strategy.
     a.txt | 1 +
     1 file changed, 1 insertion(+)
     create mode 100644 a.txt
    $
Andreas
-- 
"Totally trivial. Famous last words."
From: Linus Torvalds <torvalds@*.org>
Date: Fri, 22 Jan 2010 07:29:21 -0800

← back to recent threads