63

我不明白 和 之间的git rebase origin区别git rebase origin/master。就我而言,我克隆了一个 git 存储库两次。在第一个克隆中我必须使用git rebase origin,而在另一个克隆中我必须使用git rebase origin/master.

一个例子: http: //paste.dennis-boldt.de/2011/05/11/git-rebase

4

3 回答 3

75

git rebase origin表示“从”的跟踪分支变基origin,而git rebase origin/master表示“从”的分支变masterorigin

您必须在 中有一个跟踪分支~/Desktop/test,这意味着它git rebase origin知道要使用哪个分支origin进行变基。如果不存在跟踪分支(在 的情况下~/Desktop/fallstudie),git 不知道origin它必须采用哪个分支,并且失败。

要解决此问题,您可以使用以下命令创建分支轨道origin/master

git branch --set-upstream-to=origin/master 

或者,如果master不是当前签出的分支:

git branch --set-upstream-to=origin/master master
于 2011-05-11T13:02:41.897 回答
23

这是一个更好的选择:

git remote set-head -a origin

从文档中:

使用 -a,查询远程以确定其 HEAD,然后将 $GIT_DIR/remotes//HEAD 设置为相同的分支。例如,如果远程 HEAD 指向 next,“git remote set-head origin -a”会将 $GIT_DIR/refs/remotes/origin/HEAD 设置为 refs/remotes/origin/next。这只有在 refs/remotes/origin/next 已经存在时才有效;如果不是,则必须先获取它。

这实际上已经存在了一段时间(从 v1.6.3 开始);不知道我是怎么错过的!

于 2011-05-13T00:09:23.037 回答
2

您可以在 [.git\refs\remotes\origin] 下创建一个名为“HEAD”的新文件,并将内容“ref: refs/remotes/origin/master”放入其中。这应该可以解决您的问题。

似乎从空存储库中克隆会导致这种情况。也许空仓库没有 HEAD 因为不存在提交对象。

您可以使用

git log --remotes --branches --oneline --decorate

查看每个存储库之间的差异,而“问题”没有“origin/HEAD”

编辑:使用命令行提供方法
您也可以使用 git 命令行来执行此操作,它们具有相同的结果

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master

于 2011-05-11T15:12:29.120 回答