git checkout -b #branch name#origin / #cranch name#

时间:2015-08-18 19:21:06

标签: git

通常当我想切换到远程存储库上但不在我本地的另一个分支时,我使用了命令:git checkout origin/#branch name#而不是使用git checkout –b #branch name# origin/#branch name#,我在互联网上看到了这种用法。

这两个命令之间的区别是什么?

2 个答案:

答案 0 :(得分:1)

后者创建一个跟踪远程分支的本地分支,应该用于编辑。前者只应用于远程分支的快速浏览。只会允许您在本地分支上进行更改,因此如果使用前者,则无法提交。最新版本的git允许您使用速记git checkout #branchname#,如果您有一个遥控器,它将自动创建分支跟踪origin/#branchname#

答案 1 :(得分:1)

前者将检出远程分支,这通常会导致以下警告:

  

你处于分离头部'州。您可以环顾四周,进行实验性更改并提交它们,并且您可以放弃在此状态下进行的任何提交,而不会通过执行另一次结帐来影响任何分支。

     

如果要创建新分支以保留您创建的提交,可以再次使用-b和checkout命令(现在或稍后)。例如:

 git checkout -b new_branch_name

当您签出一个没有指向它的本地分支的提交时,您最终得到detached HEAD。这意味着虽然您可以使用它执行任何操作,但在提交更改时,没有分支指向您创建的提交。指向它的唯一指针是HEAD,它是一个瞬态指针,每当你切换分支时它都会改变。

因此,使用分离的HEAD进行提交本质上意味着如果您之后没有创建指向它们的分支,那么您创建的所有提交都将丢失。

警告指出,git checkout -b branch_name可以做到这一点。这会创建一个指向HEAD的新分支,并检查该分支,使您回到安全状态。

现在,当您执行git checkout -b <branch> origin/<branch>时,您基本上同时执行这两项操作:您可以查看origin/<branch>创建一个名为<branch>的本地分支,指向检出版本(你也切换到那个分支)。所以你最终会立即处于安全状态。

为此目的,命令与此相同:

# check out the remote branch into a detached HEAD
git checkout origin/<branch>
# create a new branch from the HEAD and check that branch out
git checkout -b <branch>

也与此相同:

# create a new local branch pointing to the remote branch
git branch <branch> origin/<branch>
# check out that branch
git checkout <branch>

顺便说一下。处理新的远程分支时有一个有用的快捷方式。例如,如果远程具有分支foo并且您还没有本地分支foo,则可以执行git checkout foo并且Git将认识到您可能想要创建本地跟踪远程分支foo的分支origin/foo