2009-01-22 134 views
75

我在github上有一个主分支(主)和一些实验工作的分支。我做了一些提交并推送到实验分支,一切都很好。git:开关分支没有分离头

现在,在不同的机器上,我试图克隆我的仓库(Git克隆),然后切换到experimental分支(GIT结账分支名称),但每次我这样做,我的头被拆卸和我无法推送我的更改。我究竟做错了什么?我感觉我错过了某个地方的基本git概念,但是阅读随机的git手册页并没有给我任何线索。

我是新来的混帐,所以我很抱歉,如果我是一个白痴,但我找不到任何文件,将帮助我重新贴上我的头。

编辑

跟踪分支的概念是我失踪了。现在我对这个概念有了一个清晰的认识。就个人而言,我发现git branch --track语法比git checkout -b branch-name origin/branch-name更直观。

感谢您的帮助!

回答

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

# othertimes 
git checkout localname 

git push origin 

为了方便起见,你可能当你签出origin/branchname你是不是真的检查出一个分支使用相同字符串的localName & BRANCHNAME
origin/branchname是“远程”的名称,你可以让他们的列表,

branch -a 

如果已经启用了色彩,当地的分支机构将是一种颜色,以及远程另一个。

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

+5

男人,为什么不“git checkout origin/branchname”开始跟踪胸罩如果它尚未被追踪,它会自动执行吗? – 2010-12-22 18:02:29

+2

,因为您仍然需要国外分支的本地名称。 – 2010-12-23 11:12:31

12
git clone [email protected]:abc/def.git 
cd def 

现在创建一个跟踪分支:

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

然后,在那里工作后,简单地推到github上通过

git push 
10

为了扩大对肯特的答复,你做你的克隆后,只有你拥有的分支(遥控器不计算在内)是在你克隆的存储库中处于活动状态的分支 - 掌握你的情况。

所以,首先你需要创建一个新的分支来跟踪远程实验分支:

$ git branch experimental origin/experimental 

,然后检查出来:

$ git checkout experimental 

不过,肯特是正确的 - 这两个命令可以结合使用

$ git checkout -b experimental origin/experimental