Git pull 告诉你 'everything is up to date'

4

我正参与一个与几个朋友一起的项目,我们将所有内容上传到git。 起初一切都很顺利,但在我的本地仓库中删除了一些文件,在线上这些文件仍然存在,因此我尝试了以下操作:

git pull

仅仅因为我删除了那些文件夹,它们就不会再出现了。Git显示“一切都是最新的”,但实际上并不是这样的。 另一个stackoverflow提问者遇到了同样的问题,在评论中有人建议他使用

标签。

git checkout HEAD

嗯,我找到了我需要的文件,但是(我猜)这只是检查,它们并不在我的文件系统中。我该如何解决这个问题?

总的来说:我想必须有一个命令可以更新所有内容吧?

谢谢!

4个回答

8
根据您的评论,看起来您可能已经提交了删除更改。请尝试以下操作:
git reset --hard HEAD~1
git pull origin branchname  OR git checkout HEAD

通常情况下,使用git reset --hard HEAD~1需要小心,因为它会将您的本地提交撤销一次。但如果您想要删除的更改并不重要且不关心修改,则这是个好主意。
希望这有所帮助。:)

我很高兴它有帮助。有时我也会这样做。;) - Abibullah Rahamathulah
我这里有一个奇怪的情况,我已经成功地将本地电脑上的所有更改推送到远程电脑,但是当我登录到我的远程服务器并执行git pull时,它显示“Already up to date”。因此,我决定在远程服务器上添加新文件,然后进行git add,接着git commit,但是当我尝试从远程服务器推送时,它说有我没有的更新,而当我拉取时,它说一切都是最新的,现在我感到困惑,请帮忙。 - Ephra

3
你忽略的关键点是,Git认为删除本地文件是对你的工作副本进行修改。在尽可能不撤消您对工作副本所做更改的情况下,Git会尝试避免这种情况发生。当您运行git pull时,远程分支被合并到当前分支中。由于合并没有影响到您已修改(已删除)的文件,因此Git将它们保持为已删除状态。
当您使用git checkout HEAD命令时,您正在告诉Git您要丢弃对之前删除的文件所做的更改(即取消删除)。
如果您已经提交了这些文件的删除操作(告诉Git您想要保留这个更改),那么这个问题的答案将完全不同。

我尝试了很多方法,所以有可能我已经提交了它。但在线上一切还好,有没有可能我只是重新获取在线代码? - Rik Nijhuis
如果你不确定自己是否提交了某些内容,那我建议你通过一些在线Git教程(有很多可以选择)来熟悉Git命令。如果你不能准确描述自己的操作,那么我们很难诊断并帮助你解决问题。 - Greg Hewgill
好的,我知道这些命令,只是不知道我做了什么和我没有做什么。问题已经解决了,无论如何还是谢谢! - Rik Nijhuis

0

还没有提交的本地文件系统更改在Git中被视为“尚未发生”。Git正在管理您的历史记录。当您提交更改(添加文件、删除文件、更改文件)时,您正在将该状态记录在工作副本的历史记录中。

Git pull和Git push的作用是“获取远程所有已发生的更改的副本”和“告诉远程发生了哪些更改”。当您执行git pull时,会将您不知道的任何提交应用于您的存储库。如果从未向该远程推送新提交,则无论您拉多少次,在第一次之后您总会收到“一切都是最新的”消息。

听起来发生的情况是您已对本地工作副本进行了更改,希望将其恢复到远程存在的状态(在这种情况下为 GitHub)。您有几个可以执行的选项。如果您尚未提交代码,则 git checkout HEAD 将恢复任何被跟踪的文件的状态,使其返回到上一个提交的状态(您也可以使用 git checkout -- . 实现此目的)。这将会将文件还原到当前分支上最后一次提交的状态。如果您要删除已经提交的更改,则可以使用 git revert。如果您查看 git log 并找到您想要使用的提交之后的第一个提交,则可以使用 git revert <SHA of first commit after your good commit>,这将更改所有文件以使它们回到 SHA 提供的状态之前的状态,然后进行一次提交。这还具有另一项优点,即如果您刚才执行的还原操作是错误的步骤,则可以还原另一个提交。

感谢您对正在发生的情况进行的解释!重置解决了问题,但下次我会使用这个方法。 - Rik Nijhuis

0
你很可能会得到一个 “一切都是最新的” 的提示,因为 pull 操作实际上是 fetch 后跟着一次合并,对于 Git 来说,fetch 是最新的。执行 git reset --hard HEAD~1 能够解决问题,但像 Abibullah 提到的那样,你需要小心使用它。你也可以在一个新目录或仓库中执行 git clone 或 pull 操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接