Git pull说“一切都是最新的”

时间:2013-12-28 21:55:42

标签: git github

我正和一些朋友一起开展项目,我们正在将所有内容上传到git。 起初一切都运行良好,但在我的本地存储库我删除了一些文件,在线这些文件仍然存在,所以我试过

git pull

只是,因为我删除了那些文件夹,他们没有回来。 Git说“一切都是最新的”,但事实并非如此。 另一个stackoverflow-questioner也有同样的问题,在评论中有人说他应该使用

git checkout HEAD

是的,有我正在寻找的文件,但(我猜)那只是检查,而且它们不在我的文件系统中。我该如何解决这个问题?

一般来说:我想必须有一个更新所有内容的命令?

谢谢!

4 个答案:

答案 0 :(得分:5)

从您的评论中看起来您可能已提交已删除的更改,

试试这个,

git reset --hard HEAD~1
git pull origin branchname  OR git checkout HEAD

通常情况下,git reset --hard HEAD~1应谨慎使用,因为它会将您的本地提交删除一个。但如果您想要删除更改并且不关心修改,那么这是一个好主意。

我希望这会有所帮助。 :)

答案 1 :(得分:2)

您缺少的关键点是Git会考虑删除本地文件以修改您的工作副本。 Git尽可能尝试不撤消对工作副本所做的更改。运行git pull时,遥控器将合并到当前分支中。由于合并中没有任何事情可做,因此合并不会影响您修改(删除)的文件,Git会将其删除。

当您使用git checkout HEAD时,您告诉Git您要丢弃先前删除的文件的更改(取消删除)。

如果您已经提交删除了这些文件(因此告诉Git您想要保留更改),那么这个问题就会有完全不同的答案。

答案 2 :(得分:0)

对于尚未提交的本地文件系统的更改,git将其视为“尚未发生”。什么git正在做它管理你的历史。当您提交更改(添加文件,删除文件,更改文件)时,您将在工作副本的历史记录中记录该状态。

git pull和git push做的是“获取遥控器上发生的所有更改的副本”和“告诉遥控器发生的更改”。当您执行git pull时,您将在本地进行任何您不了解的提交并将它们应用于您的存储库。如果没有新的提交被推送到那个遥控器,无论你拉多少次,在第一次之后你将始终收到“一切都是最新的”消息。

发生的事情是您已对本地工作副本进行了更改,并希望将其还原为远程存在的状态(在本例中为GitHub)。您可以选择几个选项。如果您尚未提交代码,git checkout HEAD将执行的操作是将任何跟踪的文件的状态恢复为上次提交的状态(您也可以使用{{1}实现此目的})。该怎么做是将文件还原到当前分支上的最后一次提交。如果您已提交要删除的提交,则可以使用git checkout -- .。如果你查看你的git revert并在你想要使用的那个之后找到第一个提交,你可以使用git log,这样做会将所有文件更改回之前的状态你提供的SHA,然后提交它。如果你刚刚执行的revert采取了错误的步骤,那么还有另外一个好处就是给你另一个恢复提交。

答案 3 :(得分:0)

你可能会得到一切都是最新的'因为一个pull实际上是一个fetch,然后是一个合并,只要git可以告诉你的fetch IS是最新的。 git reset --hard HEAD~1确实有效,但就像阿比布拉所说,你应该小心它。您也可以git clone或拉到新目录/存储库。