Gitrebase 致命的: 需要一个单一的修订

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

$ 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>

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

292019 次浏览

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

例如:

git rebase origin/master

不要:

git rebase origin

注意,当需要提交引用的参数使用时,尽管 origin应该解析为 ref origin/HEAD,但似乎并非每个存储库都获得这样的引用,因此它可能不起作用(在您的情况下也不起作用)。明确一点是有好处的。

问题是你把树枝从..。你试图重新定位到的地方。您不能重新定位到不包含当前分支最初创建时所使用的提交的分支。

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

通过重定基为 X 解决了我的问题。

如果我当前的分支源于该分支的一个祖先,那么重新定位到远程分支(甚至可能不会被检出)没有问题。

检查你的 分支名称拼写正确。我正在重新定义故事分支(即 branch_name)的基础,忘记了故事部分。(例如 story/branch_name) ,然后 git 向我吐出这个错误,这在本文中没有多大意义。

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

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

$ git remote set-head origin --auto

如果希望在本地使用不同的默认远程分支,可以指定该分支:

$ git remote set-head origin new-default

一旦设置了默认分支,您就可以只使用 git rebase <remote>中的远程名称和任何其他命令,而不是显式的 <remote>/<branch>

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

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

有关更多细节,请参见 Git 远程手册页

我遇到了这种情况,意识到我没有采取上游之前,试图重新基地。我只需要 git fetch upstream

git submodule deinit --all -f 对我有用。

$git rebase 逆流/master

致命的: 需要一个单一的修订

无效的上游 uspstream/master * *

所以我试了 < strong > $git rebase remote/ 上游/master ,它对我很有效。

对我来说,指定分支有所帮助。

  1 [submodule "test/gtest"]
2     path = test/gtest
3     url = ssh://git@git.github.com/google/googletest.git
4     branch = main