我刚刚开始学习Git,the tutorial I'm using says that when cloning remote repositories, switching to a remote branch is a big no-no.那就是 - 如果我克隆了一个分支名称为branch1
的存储库,我想要对它进行处理,我需要使用
git checkout --track -b branch1 origin/branch1
跟踪它。但是,当我尝试使用
时git checkout branch1
Git回复
Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'
所以,我的常识告诉我,自从编写该教程以来,Git的开发人员修复了这个陷阱,并且如果有人试图切换到远程分支,Git会自动执行它,并创建一个跟踪的本地分支它。但是,我在发布说明或Google搜索中找不到对此更改的任何引用。
那么,他们修好了吗?简单地检查那些远程分支现在是否安全?或许我误解了该教程中的警告,这是指我应该注意的另一个陷阱?
答案 0 :(得分:5)
你没有签出远程分支。
签出branch1
与签出“远程分支”不同。以下命令尝试签出不存在的本地分支:
git checkout branch1
而以下命令检出远程分支指向的提交:
git checkout origin/branch1
导致detached head,可能是教程警告的陷阱。
如果您尝试检出本地不存在但在遥控器上具有相同名称的分支的分支,Git将自动创建一个本地分支并将其设置为跟踪同名的远程分支。
答案 1 :(得分:1)
来自Documentation/RelNotes/1.6.6.txt
:
- “git checkout frotz”当没有本地分支“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'