【问题标题】:git: reset to remote branchgit:重置到远程分支
【发布时间】:2015-11-24 14:58:10
【问题描述】:

克隆存储库后,我无法将该存储库的状态重置为远程分支。

$ 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. 是否有可以在非特定分支的重置命令之前运行的命令(如结帐)?

【问题讨论】:

  • 只是为了确保:你写的是真实的分支名称而不是'&lt;upstream branch&gt;'逐字?
  • 另请注意,您不能将存储库的状态“重置”到某个分支:存储库包含已克隆的存储库的所有分支。 git reset 可用于重置 分支 的状态(如果询问,还可以重置索引和工作树,或者仅索引和工作树或仅索引),但不能重置存储库作为一个整体。考虑阅读this
  • 您似乎回答了自己的问题。除非,你问的是 git 内部结构,那么这将是一个不同的问题,在这种情况下你应该重新措辞你的帖子。

标签: git reset git-checkout


【解决方案1】:

Git 在您的新本地存储库中找不到对名为 upstream_branch 的分支的引用,因为它不存在。但是origin/upstream_branch 的引用确实存在。运行git branch --all,您将看到存储库中的完整分支列表,包括本地和远程。

在第二个工作场景中,当您运行 git checkout upstream_branch 时,您创建了一个名为 upstream_branch 的本地分支,并设置为跟踪远程分支 origin/upstream_branch。这就是后续git reset 命令起作用的原因。

【讨论】:

    【解决方案2】:

    “将该存储库的状态重置为远程分支”是什么意思

    如果您希望本地分支等于远程分支,只需使用 **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
    

    【讨论】:

    • 这个例子可能确实太简单了。想象一下在重置命令之前工作区变脏了。
    • 然后,检查我的新答案。
    猜你喜欢
    • 2011-10-28
    • 2012-10-22
    • 2011-09-10
    • 2016-07-08
    • 2011-01-17
    • 2012-07-25
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多