【问题标题】:git: switch branch without detaching headgit:在不分离头的情况下切换分支
【发布时间】:2010-10-03 01:07:18
【问题描述】:

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

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

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

编辑

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

感谢您的帮助!

【问题讨论】:

  • 要在不分离头的情况下切换分支,使用 Git 2.23(2019 年 8 月),请使用 git switch:参见 my answer below

标签: git version-control


【解决方案1】:
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

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

获取它们的列表
branch -a 

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

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

【讨论】:

  • 伙计,如果“git checkout origin/branchname”还没有被跟踪,为什么不开始自动跟踪分支?
  • 因为您仍然需要外国分支机构的本地名称。
  • 这是我正在做的,错误信息:$ git checkout -b topic/fetch upstream/topic/fetch fatal: git checkout: updates paths is incompatible withswitching branch。您是否打算签出无法解析为提交的“上游/主题/获取”?
  • 感谢有关颜色的提示。启用颜色:git config --global --add color.ui true
  • 值得注意的是,“origin/branchname”实际上可以是任何可以解析为 SHA1 或 SHA1 本身的东西 =)。我经常使用它来创建具有任意根的任意分支。
【解决方案2】:
git clone git@github.com:abc/def.git
cd def

现在创建一个跟踪分支:

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

然后,在那里工作后,只需通过

推送到github
git push

【讨论】:

  • git branch -t origin/experimental #不需要输入这么多:)
  • 我要跟踪的分支叫做topic/fetch。当我尝试执行 $ git branch --track topic/fetch upstream/topic/fetch 时,它说,致命:不是有效的对象名称:'upstream/topic/fetch'。
  • @Dustin,该命令创建了一个本地分支“origin/experimental”,用于跟踪本地 master。我猜这是一个相当常见的错误。
  • @PDug % git checkout -t origin/experimental 分支实验设置,通过变基从原点跟踪远程分支实验。切换到新的“实验”分支
【解决方案3】:

为了扩展 Kent 的回复,在您进行克隆之后,您将拥有的唯一分支(远程不计算在内)是您克隆的存储库中处于活动状态的分支——在您的情况下为 master。

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

$ git branch experimental origin/experimental

然后检查一下:

$ git checkout experimental

但是,Kent 是正确的——这两个命令可以组合

$ git checkout -b experimental origin/experimental

【讨论】:

    【解决方案4】:

    使用 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'
    

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 2021-12-25
      • 2020-05-31
      • 2012-08-20
      • 2012-11-18
      • 2021-08-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多