通常当我想切换到远程存储库上但不在我本地的另一个分支时,我使用了命令:git checkout origin/#branch name#
而不是使用git checkout –b #branch name# origin/#branch name#
,我在互联网上看到了这种用法。
这两个命令之间的区别是什么?
答案 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
。