“git rebase origin”与“git rebase origin / master”

时间:2011-05-11 11:39:14

标签: git git-rebase

我没有区分git rebase origingit rebase origin/master。在我的情况下,我克隆了两次git存储库。在第一个克隆中,我必须使用git rebase origin,而在另一个克隆中,我必须使用git rebase origin/master

示例:http://paste.dennis-boldt.de/2011/05/11/git-rebase

3 个答案:

答案 0 :(得分:64)

git rebase origin表示"来自origin"的跟踪分支,而git rebase origin/master表示"来自master的分支origin ~/Desktop/test"

您必须在git rebase origin中设置跟踪分支,这意味着origin知道~/Desktop/fallstudie的哪个分支要重新定位。如果不存在跟踪分支(在origin的情况下),git不知道它必须采用origin/master的哪个分支,并且失败。

要解决此问题,您可以使用:

创建分支跟踪git branch --set-upstream-to=origin/master
master

或者,如果git branch --set-upstream-to=origin/master master 不是当前签出的分支:

{{1}}

答案 1 :(得分:20)

这是一个更好的选择:

git remote set-head -a origin

来自文档:

  

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

这实际上已经存在了很长时间(自v1.6.3起);不确定我是怎么错过的!

答案 2 :(得分:2)

您可以在[.git \ refs \ _dototes \ 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