我在计算机上创建了一个git存储库并将其推送到我的服务器。然后我进入了另一台应该与存储库内容合并的计算机上的文件夹。
以下是我执行的确切步骤(我转载): 在第一个存储库:
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
在第二个(文件被删除的那个):
git init
echo "def" > b
git add b
git remote add origin *repo adress*
git remote update
git pull origin master
我期望发生的是git会提取这些文件,然后我可以提交我的本地文件并将其重新启动。但现在我的本地文件已经消失了。 git真的只是在没有警告的情况下删除本地文件(我没有使用任何强制选项或类似的东西)?
是否有可能让他们回来,或者这是预期和预期的行为,只是删除未跟踪的文件?
仅git status
的输出说:
# On branch master
nothing to commit, working directory clean
我刚刚用测试存储库重新演绎了这些步骤,它按照描述进行:文件“a”被拉入第二个存储库,但是文件“b”没有消失(只有一个被'ls'显示)。
答案 0 :(得分:3)
好吧,我发现了另一件奇怪的事情。
在git pull
的帮助下,有如下句子:
“在默认模式下,git pull是git fetch的简写,后跟 git merge FETCH_HEAD“
所以,我使用$git fetch
然后使用$git merge FETCH_HEAD
而不是git pull origin master
。然后有什么了不起的,文件b仍在那里。
所以,我真的不知道git pull origin master
究竟做了什么。
另外,我在
中看到了解释即“git merge发现它没有有效的HEAD,因此会进行硬重置,这显然会覆盖已存在的所有文件。”
但我真的对此表示怀疑,因为我可以成功使用$git merge FETCH_HEAD
。
如果您想查找丢失的文件,可以转到@ellotheth提供的Git pull deleted uncommitted changes