假设远程仓库为 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