11

我在计算机上创建了一个 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”没有消失(只有 a 由 'ls' 显示)。

4

1 回答 1

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的。

另外,我看到了一个解释

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

那就是“git merge发现它没有有效的HEAD,因此进行了硬重置,这显然会覆盖已经存在的任何文件。”

但我真的很怀疑这一点,因为我可以$git merge FETCH_HEAD成功使用。

如果你想找到丢失的文件,你可以去查看@ellotheth 提供的Git pull 删除的未提交的更改

于 2012-12-20T10:40:38.737 回答