假设远程为origin,分支为master,并说您已经master签出,可以尝试以下操作:
git fetch origin
git reset --hard origin/master
基本上,这只是将当前分支指向HEAD远程分支的。
警告:如评论中所述,这将丢弃您的本地更改并覆盖原点上的任何内容。
或者,您可以使用管道命令执行基本相同的操作:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
编辑:我想简要解释一下为什么行得通。
该.git文件夹可以保存任何数量的存储库的提交。由于提交哈希实际上是一种验证提交内容的方法,而不仅仅是随机生成的值,因此它用于匹配存储库之间的提交集。
分支只是指向给定哈希的命名指针。这是一个示例集:
$ 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