Git:重置到远程分支

5
在克隆了一个存储库之后,我无法将该存储库的状态重置为远程分支。
$ git clone <repo>
$ git reset --hard <upstream branch>
fatal: ambiguous argument '<upstream branch>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]

一个可行的方法是在前面加上 origin 前缀。

$ git reset --hard origin/<upstream branch>

或者在提交之前进行检查

$ git checkout <upstream branch>
$ git reset --hard <upstream branch>

问题:

  1. checkout命令提供了哪些额外的信息或状态改变,以便本地Git仓库最终可以重置其状态?
  2. 在reset命令之前是否有一个像checkout这样的命令,它不是特定于分支的?

只是为了确保:您是否编写了一个真实的分支名称,而不是逐字使用“'<upstream branch>'”? - kostix
请注意,您无法将存储库的状态“重置”为某个分支:存储库包含克隆的存储库的所有分支。 git reset 可用于重置一个分支的状态(如果需要,还可以重置索引和工作树,或仅重置索引和工作树或仅重置索引),但不能重置整个存储库。建议阅读此文 - kostix
看起来你已经回答了自己的问题。除非你在询问 Git 的内部机制,否则这将是一个不同的问题,在这种情况下,你应该重新措辞你的文章。 - ryanwebjackson
以下问题的答案中包含了很多有用的信息,对于那些来到这里的人来说非常有帮助。https://dev59.com/U3I-5IYBdhLWcg3w48xP?rq=1 - Kay V
2个回答

3

在你的本地仓库中,Git找不到一个名为upstream_branch的分支引用,因为它不存在。但是origin/upstream_branch的引用确实存在。运行git branch --all 命令,就可以看到你的仓库中所有分支的完整列表,包括本地和远程。

在第二种工作情况下,当你运行git checkout upstream_branch命令时,创建了一个名为upstream_branch 的本地分支,并设置为跟踪远程分支origin/upstream_branch。这就是后续git reset 命令能够正常运行的原因。


0
你是什么意思说“将该存储库的状态重置为远程分支”?
如果你想要一个与远程分支相等的本地分支,只需使用git checkout即可:
git checkout -b local_branch_name origin/remote_branch_name

如果您的工作区很混乱,想要摆脱任何已添加/修改的文件,可以输入以下命令:
git clean -f
git checkout -f -b local_branch_name origin/remote_branch_name

这个例子可能确实太简单了。想象一下在重置命令之前使工作区变脏。 - user2124712
然后,请检查我的新答案。 - Claudio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接