Git silently overwrote an important untracked file for me today. I
have come up with the following transcript to reproduce the issue.
In a nutshell, if an untracked file is in .gitignore, a merge from a
branch where the file was added will OVERWRITE the untracked file
without warning.
This doesn't seem right.
What do others think?
Josh
-------------------------------
/s/testgitoverwrite
$ mkdir aaa
/s/testgitoverwrite
$ cd aaa
/s/testgitoverwrite/aaa
$ echo abc > abc.txt
/s/testgitoverwrite/aaa
$ ls -l
total 1
-rw-r--r-- 1 Joshua Administ 4 Aug 16 23:10 abc.txt
/s/testgitoverwrite/aaa
$ git init
Initialized empty Git repository in s:/testgitoverwrite/aaa/.git/
/s/testgitoverwrite/aaa (master)
$ git add abc.txt
/s/testgitoverwrite/aaa (master)
$ git commit -m "Added abc.txt"
[master (root-commit) 0e8bffb] Added abc.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 abc.txt
/s/testgitoverwrite/aaa (master)
$ cd ..
/s/testgitoverwrite
$ git clone aaa bbb
Cloning into bbb...
done.
/s/testgitoverwrite
$ cd bbb
/s/testgitoverwrite/bbb (master)
$ ls -l
total 1
-rw-r--r-- 1 Joshua Administ 4 Aug 16 23:10 abc.txt
/s/testgitoverwrite/bbb (master)
$ echo "Important stuff" > important.txt
/s/testgitoverwrite/bbb (master)
$ git add important.txt
/s/testgitoverwrite/bbb (master)
$ git commit -m "This file is SO important"
[master 2fe9ab6] This file is SO important
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 important.txt
/s/testgitoverwrite/bbb (master)
$ cd ..
/s/testgitoverwrite
$ cd aaa
/s/testgitoverwrite/aaa (master)
$ echo "Local testing copy of important.txt" > important.txt
/s/testgitoverwrite/aaa (master)
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# important.txt
nothing added to commit but untracked files present (use "git add" to track)
/s/testgitoverwrite/aaa (master)
$ git pull ../bbb
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../bbb
* branch HEAD -> FETCH_HEAD
Updating 0e8bffb..2fe9ab6
error: Untracked working tree file 'important.txt' would be overwritten
by merge. Aborting
/s/testgitoverwrite/aaa (master)
$ git pull --rebase ../bbb
From ../bbb
* branch HEAD -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
error: Untracked working tree file 'important.txt' would be overwritten
by merge.
could not detach HEAD
/s/testgitoverwrite/aaa (master)
$ echo important.txt > .gitignore
/s/testgitoverwrite/aaa (master)
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
nothing added to commit but untracked files present (use "git add" to track)
/s/testgitoverwrite/aaa (master)
$ cat important.txt
Local testing copy of important.txt
/s/testgitoverwrite/aaa (master)
$ git pull ../bbb
From ../bbb
* branch HEAD -> FETCH_HEAD
Updating 0e8bffb..2fe9ab6
Fast-forward
important.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 important.txt
/s/testgitoverwrite/aaa (master)
$ cat important.txt
Important stuff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html