【问题标题】:git rebase fatal: Needed a single revisiongit rebase fatal:需要一个修订版
【发布时间】:2011-06-15 10:43:36
【问题描述】:

我有一个公共存储库的分支,我正在尝试使用来自原始存储库的当前提交来更新我的分支:

$ git fetch <remote>
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 20 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
From git://github.com/path_to/repo
  9b70165..22127d0  master     -> $/master
$ git rebase <remote>
fatal: Needed a single revision
invalid upstream <remote>

&lt;remote&gt; 代替了我的远程名称,实际上并不是我的远程名称。关于这个错误的文档似乎有点松散。

【问题讨论】:

  • 我收到此错误的原因不相关 - 在 Windows 命令提示符下使用“git rebase --interactive c4e9c94^”。它提示我“更多?”,无论它如何回答提示,它都说“致命:需要一次修订”。但是当我从 bash 运行相同的命令时,它运行良好。
  • 附带说明,对我来说,除了将上游分支列为“远程”之外,我还必须获取我想要重新定位的特定分支。 “git fetch master”。使用“git fetch ”仅获取 仍然会给我这个错误。

标签: git github rebase


【解决方案1】:

您需要向git rebase 提供分支名称(或其他提交标识符),而不是远程名称。

例如:

git rebase origin/master

不是:

git rebase origin

注意,虽然origin 在用作需要提交引用的参数时应该解析为引用origin/HEAD,但似乎并非每个存储库都获得这样的引用,所以它可能不会(在你的情况下没有't)工作。明确是值得的。

【讨论】:

  • 后者实际上应该可以工作 - 参考上下文中的origin 被解释为origin/HEAD。我已经看到存储库最终不知道origin/HEAD 是什么...
  • @Jefromi:恐怕我不相信你,我刚刚在测试存储库上尝试了git rebase origin(origin 有一个HEAD),我得到了 OP 的错误. rebase 的文档没有说远程名称对&lt;upstream&gt; 有效。
  • @Charles:嗯,这可能是一个错误? git rev-parse origin 有效,git rebase origin 在我的 git.git 克隆中也有效(在最新、快进和真正的 rebase 案例中,包括交互式)。
  • @Jefromi:你能git describe你的HEAD吗?
  • @Charles:最新,v1.7.4-rc3!我不是非常渴望做一个平分来寻找这个......
【解决方案2】:

检查您是否正确拼写了分支名称。我正在重新定义一个故事分支(即branch_name)并忘记了故事部分。 (即story/branch_name)然后 git 向我吐出这个错误,这在这种情况下没有多大意义。

【讨论】:

  • 正是这个。当分支实际命名为features/featureName时输入featureName
  • 更彻底地寻找简单的错别字也是一个好主意。我在创建分支时不小心交换了两个字母,这个错字真的很难发现。
【解决方案3】:

我遇到了这个问题,并意识到在尝试变基之前我没有获取上游。我只需要git fetch upstream

【讨论】:

    【解决方案4】:

    问题是您从...中分支了一个分支,您试图重新定位到该分支。您不能变基到不包含您的当前分支最初创建的提交的分支。

    当我第一次将本地分支 X 重新设置为推送的 Y,然后尝试将分支(首先在 X 上创建)重新设置为推送的 Y 时,我得到了这个。

    通过变基到 X 为我解决了问题。

    只要我当前的分支源自该分支的祖先,我就可以重新定位到远程分支(甚至可能没有签出)。

    【讨论】:

    • 您可以使用--onto 重新定位到这样的分支。一切都源自 some 共同祖先(对于普通存储库),所以这不是问题。当我还没有创建分支来跟踪 origin/foo 时,我尝试重新定位到 foo 时遇到了这个错误。
    【解决方案5】:

    git submodule deinit --all -f 为我工作。

    【讨论】:

      【解决方案6】:

      当您的存储库没有为远程设置默认分支时,会发生该错误。您可以使用git remote set-head 命令修改默认分支,从而能够使用远程名称而不是该远程中的指定分支。

      查询远程(在本例中为origin)的HEAD(通常为master),并将其设置为默认分支:

      $ git remote set-head origin --auto
      

      如果你想在本地使用不同的默认远程分支,你可以指定那个分支:

      $ git remote set-head origin new-default
      

      设置默认分支后,您可以只使用git rebase &lt;remote&gt; 中的远程名称和任何其他命令,而不是显式的&lt;remote&gt;/&lt;branch&gt;。

      在幕后,此命令会更新 .git/refs/remotes/origin/HEAD 中的引用。

      $ cat .git/refs/remotes/origin/HEAD 
      ref: refs/remotes/origin/master
      

      更多详情请参阅git-remote man page。

      【讨论】:

      • @VladimirShefer 重写了整个答案以使用 git remote set-head 而不是直接与 .git/refs/remotes/origin/HEAD 混淆。
      • 另外,我认为这比接受的答案更好地回答了原始问题,这只是解决根本原因的方法。
      • 谢谢你的回答。现在好多了!我已经删除了我的反对标记。
      【解决方案7】:

      $ git rebase 上游/主控

      致命:需要一个修订版

      上游 usptream/master 无效**

      所以我尝试了 $ git rebase remotes/upstream/master,它对我有用。

      【讨论】:

        猜你喜欢
        • 2014-11-28
        • 2010-12-10
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2017-03-18
        相关资源
        最近更新 更多