javex
javex

Reputation: 7564

Git deleted untracked files on pull

I created a git repository on computer and pushed it to my server. Then I went into a folder on another computer that should be merged with the contents of the repository.

Here are the exact steps I executed (I reproduced it): On the first repository:

git init
git remote add origin *repo adress*
git remote update
echo "abc" > a
git add a
git commit -a -m "Intial commit"
git push --set-upstream origin master

On the second one (the one where files get deleted):

git init
echo "def" > b
git add b
git remote add origin *repo adress*
git remote update
git pull origin master

What I expected to happen was that git would pull those files and then I could commit my local files and push it back up. But instead now my local files are gone. Did git really just delete local files without a warning (I didn't use any force option or similar)?

Is there a possibility to get them back or is this intended and expected behavior to just remove untracked files?

Output of just git status says:

# On branch master
nothing to commit, working directory clean

I just reporduced these steps with a test repository and it happens as described: File "a" gets pulled into repository number two, but file "b" is no gone (only a is displayed by 'ls').

Upvotes: 13

Views: 10608

Answers (2)

testing_22
testing_22

Reputation: 2585

I wasn't able to find it anyhow. However, I remembered the file name and just recreated this file with this same name and my VSCode helped me out with the rest.

enter image description here

Upvotes: 0

pktangyue
pktangyue

Reputation: 8534

Well, I find another strange thing.

In the help of git pull, there is such a sentence as the following:

"In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD"

So, I use $git fetch and then $git merge FETCH_HEAD instead of git pull origin master above. Then what amazing, file b is still there.

So, I really don't know what git pull origin master exactly does.

Also, I saw an explain in

http://git.661346.n2.nabble.com/pulling-the-root-commit-overwrites-untracked-files-without-warning-1-7-2-3-td5658622.html

that is "git merge finds that it has no valid HEAD and therefore does a hard reset, which obviously overwrites any files already there. "

But I really doubt this, because I can use $git merge FETCH_HEAD successfully.

If you want to find the lost files, you can goto see Git pull deleted uncommitted changes provided by @ellotheth

Upvotes: 4

Related Questions