git:switch分支没有分离头

时间:2009-01-22 23:37:06

标签: git version-control

我在github上有一个存储库,它有一个主分支(master)和一个分支用于一些实验工作。我做了一些提交并推到实验分支,一切都很好。

现在,在另一台机器上,我尝试克隆我的存储库(git clone 存储库),然后切换到实验分支(git checkout branchname )但每次都我这样做,我的头被分离了,我不能推动我的改变。我究竟做错了什么?我觉得我在某个地方缺少一个基本的git概念,但是阅读随机git手册页并没有给我任何线索。

我是git的新手,所以我很抱歉,如果我是一个白痴,但我在文档中找不到任何可以帮助我重新思考的东西。

修改

跟踪分支的概念是我所缺少的。现在我认识到这个概念一切都很清楚。就个人而言,我发现git branch --track语法比git checkout -b branch-name origin/branch-name更直观。

感谢您的帮助!

4 个答案:

答案 0 :(得分:103)

# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

为方便起见,您可以对localname&使用相同的字符串。 BRANCHNAME
当你签出origin/branchname时,你并没有真正检查出一个分支。 origin/branchname是一个“远程”名称,您可以使用

获取它们的列表
branch -a 

如果启用了颜色,则本地分支将是一种颜色,而远程另一种颜色。

您必须首先在本地跟踪远程分支,以便能够切换到并对其进行处理。

答案 1 :(得分:16)

git clone git@github.com:abc/def.git
cd def

现在创建一个跟踪分支:

git branch --track experimental origin/experimental
git checkout experimental

然后,在那里工作之后,只需按

推送到github
git push

答案 2 :(得分:10)

为了扩展肯特的回复,在你做克隆之后,你所拥有的唯一分支(遥控器不计算)就是你克隆的存储库中活动的分支 - 在你的情况下为master。

因此,首先,您需要创建一个新分支来跟踪远程实验分支:

$ git branch experimental origin/experimental

然后检查出来:

$ git checkout experimental

然而,Kent是正确的 - 这两个命令可以合并

$ git checkout -b experimental origin/experimental

答案 3 :(得分:2)

在Git 2.23(2019年8月)中,您将使用git switch command

如果您有一个同名的远程分支,它将被自动跟踪:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'