协慌网

登录 贡献 社区

将本地存储库分支重置为远程存储库 HEAD

如何将本地分支重置为远程存储库中的分支?

我做了:

git reset --hard HEAD

但是当我运行git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

你能告诉我为什么我有这些 “修改过的” 吗?我没有碰过这些文件?如果我这样做,我想删除它们。

答案

将分支设置为与远程分支完全匹配可以分两步完成:

git fetch origin
git reset --hard origin/master

如果您想在执行此操作之前保存当前分支的状态(以防万一),您可以执行以下操作:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

现在你的工作被保存在 “my-saved-work” 分支上,以防你决定要它回来(或者想要稍后查看它或者将它与你更新的分支区分开来)。

请注意,第一个示例假定远程仓库的名称为 “origin”,远程仓库中名为 “master” 的分支与本地仓库中当前已检出的分支匹配。

顺便说一下,你所处的这种情况看起来非常像一种常见的情况,即在非裸存储库的当前检出的分支中已经完成了推送。你最近是否进入了当地的仓库?如果没有,那么不用担心 - 其他必须导致这些文件意外地最终被修改。否则,您应该意识到不建议将其推入非裸存储库(而不是特别是当前已检出的分支)。

我需要做(在接受的答案中的解决方案):

git fetch origin
git reset --hard origin/master

其次是:

git clean -f

删除本地文件

要查看将删除哪些文件(而不实际删除它们):

git clean -n -f

首先,重置为相应上游分支的先前获取的HEAD

git reset --hard @{u}

指定@{u}或其详细形式@{upstream}的优点是不必显式指定远程仓库和分支的名称。

接下来,根据需要删除未跟踪的文件,也可以选择-x

git clean -df

最后,根据需要,获取最新的更改:

git pull