假设远程是origin,分支是master,并且说您已经签出master,可以尝试以下操作:
git fetch origin
git reset --hard origin/master
这基本上只是将当前分支指向远程分支的HEAD。
警告:如 cmets 所述,这将丢弃您的本地更改并用原点上的任何内容覆盖。。 p>
或者你可以使用管道命令来做同样的事情:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
编辑:我想简要解释一下为什么会这样。
.git 文件夹可以保存任意数量的存储库的提交。由于commit hash其实是对commit内容的一种验证方式,而不仅仅是一个随机生成的值,它是用来匹配repositories之间的commit sets。
分支只是一个指向给定哈希的命名指针。这是一个示例集:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
这些文件中的每一个都包含一个指向提交的哈希:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
这些都是git内部存储机制,独立于工作目录工作。通过执行以下操作:
git reset --hard origin/master
git 会将当前分支指向与 origin/master 指向的相同的哈希值。然后它会强制更改工作目录以匹配该哈希处的文件结构/内容。
要在工作中看到这一点,请继续尝试以下操作:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD