git:switch分支没有分离头

Dan*_*son 96 git version-control

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

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

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

编辑

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

谢谢您的帮助!

Ken*_*ric 108

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

# othertimes 
git checkout localname 

git push origin
Run Code Online (Sandbox Code Playgroud)

为方便起见,您可以对localname和branchname使用相同的字符串.
当您签出时,origin/branchname您并未真正签出分支. origin/branchname是一个"远程"名称,你可以得到它们的列表

branch -a 
Run Code Online (Sandbox Code Playgroud)

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

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

  • 男人,为什么不"git checkout origin/branchname"在没有跟踪的情况下自动开始跟踪分支? (8认同)
  • 因为您仍然需要外部分支的本地名称. (2认同)
  • 感谢有关颜色的提示.要启用颜色:`git config --global --add color.ui true` (2认同)

Chr*_*egg 16

git clone git@github.com:abc/def.git
cd def
Run Code Online (Sandbox Code Playgroud)

现在创建一个跟踪分支:

git branch --track experimental origin/experimental
git checkout experimental
Run Code Online (Sandbox Code Playgroud)

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

git push
Run Code Online (Sandbox Code Playgroud)

  • git branch -t origin/experimental#不需要输入那么多:) (3认同)

Pat*_*otz 11

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

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

$ git branch experimental origin/experimental
Run Code Online (Sandbox Code Playgroud)

然后检查出来:

$ git checkout experimental
Run Code Online (Sandbox Code Playgroud)

但是,Kent是正确的 - 这两个命令可以组合在一起

$ git checkout -b experimental origin/experimental
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 9

对于 Git 2.23(2019 年 8 月),您可以使用以下git switch命令

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

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
Run Code Online (Sandbox Code Playgroud)