如何将本地git repo与origin / master同步,消除所有更改

时间:2013-09-13 09:12:42

标签: git sync local pull master

我想要同步我的本地存储库,以便使本地成为主服务器的精确副本。检查后我已经添加了几个文件到我的本地,而不是主文件,我不想提交。不过,在这个过程中,我想删除本地与master的所有差异:当我完成后,本地的其他文件将被删除。

早期的问题提供了一种让本地人像大师一样的策略: Reset local repository branch to be just like remote repository HEAD

但这对我不起作用。推荐的命令, git fetch origin git reset --hard origin / master

不要删除本地的其他文件,即使git status表示local和master相同。而且,在一种情况下,主文件版本的文件并没有取代我的本地版本。

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:10)

实际上,您尝试的命令会将所有跟踪的文件重置为origin/master状态。但是,git不会触及未跟踪的文件(通常)。实际上,"未跟踪文件" -feature的全部目的是,使文件完全独立于存储库中的git。

但是,如果您要执行以下操作,仍可以使用git delete untracked文件:

要从存储库中删除所有未跟踪的文件,请键入:

git clean -f

(资料来源:How to remove local (untracked) files from the current Git working tree?

请注意,由于您删除的文件未跟踪,会永久丢失

答案 1 :(得分:3)

我认为你混合了两件事:

  • 更新您的存储库以与远程存储库同步
  • 将您的工作目录重置为与特定提交相同。

要更新您的存储库(即git存储有关您的项目及其历史记录的所有信息的数据库),请使用git fetch remote_repository_nameremote_repository_name通常为origin)。运行此命令后,远程存储库origin中存在的所有提交和对象都将出现在您的存储库中。

现在,工作目录 - 即您在包含项目的文件夹中看到的文件 - 与存储库数据库本身不同。请注意,您不能使工作目录与远程存储库相同,因为这些是两种不同的东西(包含文件和git数据库的目录)。您可以重置工作目录以反映特定提交(例如来自master的{​​{1}}分支的提示) - 此处@oznerol256's answer为您提供所需内容。

答案 2 :(得分:-2)

由于文件尚未提交,您可以使用:

rm -rf ./*
git reset --hard HEAD

这将清除所有文件,然后将目录还原回其原始状态。