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’).
Well, I find another strange thing.
In the help of
git pull, there is such a sentence as the following:So, I use
$git fetchand then$git merge FETCH_HEADinstead ofgit pull origin masterabove. Then what amazing, file b is still there.So, I really don’t know what
git pull origin masterexactly 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_HEADsuccessfully.If you want to find the lost files, you can goto see Git pull deleted uncommitted changes provided by @ellotheth