在git安全中签出远程分支



我刚刚开始学习Git,我使用的教程说,在克隆远程存储库时,切换到远程分支是一个大禁忌。也就是说,如果我克隆了一个分支名为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就会自动按照正确的方式切换,并创建一个本地分支来跟踪它。然而,我在发布说明或谷歌搜索中找不到任何关于此更改的参考。

那么,他们修好了吗?现在可以简单地签出这些远程分支了吗?或者我误解了教程中的警告,它指的是我应该注意的另一个陷阱?

没有签出远程分支。

签出branch1与签出"远程分支"不同。下面的命令尝试检出一个不存在的本地分支:

git checkout branch1

,而下面的命令检出远程分支指向的提交:

git checkout origin/branch1

导致分离的头部,可能是教程警告的陷阱。

Git会自动创建一个本地分支,并设置它跟踪一个同名的远程,如果你试图签出一个本地不存在的分支,但在远程有一个同名的分支。

From 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'

最新更新