3

我刚开始学习 Git,我使用的教程说在克隆远程存储库时,切换到远程分支是一个很大的禁忌。也就是说 - 如果我克隆了一个具有分支名称的存储库branch1,并且我想处理它,我需要使用

git checkout --track -b branch1 origin/branch1

跟踪它。但是,当我尝试使用

git checkout branch1

吉特回复了

Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'

因此,我的常识告诉我,自从编写了该教程以来,Git 的开发人员就修复了这个陷阱并做到了,所以如果有人试图切换到远程分支,Git 会自动以正确的方式进行操作并创建一个跟踪它的本地分支。但是,我在发行说明或 Google 搜索中找不到有关此更改的任何参考。

那么,他们解决了吗?现在简单地检查那些远程分支是否安全?或者我误解了该教程中的警告,它指的是我应该注意的另一个陷阱?

4

2 回答 2

5

没有签出远程分支。

签出branch1与签出“远程分支”不同。以下命令尝试检查不存在的本地分支:

git checkout branch1

而以下命令检查远程分支指向的提交:

git checkout origin/branch1

这会导致head 分离,这可能是教程警告的陷阱。

如果您尝试检出本地不存在但在远程具有同名分支的分支,Git 将自动创建本地分支并将其设置为跟踪同名远程。

于 2011-10-19T01:21:49.753 回答
1

来自Documentation/RelNotes/1.6.6.txt

  • 当没有本地分支“frotz”但只有一个远程跟踪分支时,“git checkout frotz” 将“frotz”作为在相应远程跟踪分支启动命名分支的请求。

所以是的,Git 开发人员稍微简化了这个过程:您不必再指定--track -b创建本地远程跟踪分支。IIRC,在此更改之前,Git 曾经抱怨缺少本地分支“frotz”。

就像 meagar 所说,使用语法检查远程分支仍然是可能的git checkout origin/branch1:如果你只是想环顾四周,这样做是可以的,但你不应该对它们进行永久性更改。这是当您签出远程分支时 Git 打印出的警告:

$ git checkout origin/master
Note: checking out 'origin/master'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at a48aafd... Merge branch 'maint'
于 2011-10-19T01:28:38.920 回答