“ git branch”和“ git checkout -b”之间有什么区别?


Answers:


258

git checkout -b BRANCH_NAME创建一个新分支并签出新分支,同时git branch BRANCH_NAME创建一个新分支,但将您留在同一分支上。

换句话说git checkout -b BRANCH_NAME,为您执行以下操作。

git branch BRANCH_NAME    # create a new branch
git checkout BRANCH_NAME  # then switch to the new branch

44

git branch 创建分支,但仍保留在已签出的当前分支中。

git checkout -b 创建一个分支并签出。

它可以被视为以下形式的缩写:

git branch name
git checkout name

可以说:“ git分支创建了分支,但是您从签出的位置开始保留在当前分支中。”
Akash Verma

28
  • git branch显示您的所有分支
  • git branch newbranch创建一个新分支
  • git checkout -b newbranch创建一个新分支并立即切换到该分支。这是因为相同的git branch newbranch后跟git checkout newbranch

23

完整语法:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

[FROM_BRANCH]是可选的。如果没有FROM_BRANCH,git将使用当前分支。


7

还有另外一个要提及的标志,与之相关。

git checkout -B BRANCH_NAME

这是我最近一直在使用的一个非常有用的命令。此命令检出您指定的分支,并根据源分支重置该分支。


2
你能解释更多吗?我不知道是什么重置git的手段
麦克尔迈耶

3
从git手册上:If -B is given, <new_branch> is created if it doesn't exist; otherwise, it is reset. This is the transactional equivalent of $ git branch -f <branch> [<start point>] $ git checkout <branch>
ddavison 2014年

因此,您的意思是可以重用现有分支?
米凯尔·梅耶

1
checkout -B如果您要切换到的分支被其他人共享,这会很危险吗?我最近使用了它,它似乎自动将其他分支的更改合并到我切换到的分支中。
杰夫

如果您从远程获取另一个开发人员分支,然后执行“ git checkout -B是”,它将合并甚至替换
ddavison 2015年

-1

两种命令的形式都相似(请查看git-scm docs版本2.11.1):

git branch <branchname> <start-point>

git checkout -b <new_branch> <start_point>

后者的第一执行分支命令,然后加入结帐。在这种形式中,显式引用了git-branch的doc:

指定-b会导致创建新分支,就像调用git-branch [2]然后将其检出一样


1
这不会在2011
。– melpomene

实际上,它确实添加了有关<start-point>的新信息。我个人发现,在不必先检出对象或移动当前分支的情况下,在其他位置的对象上创建分支非常有用。在我看来,实际上是指git-reference时,将表示法用作[FROM_BRANCH]是没有用的。
Pshemy108 '18

可选的第二个参数与问题无关。两个命令之间是相同的,OP要求区别。(如果您真的认为这很重要,那么我只会在接受的答案中添加评论。)
melpomene

-1

本质上:

A-git分支使您可以简单明了地创建分支。

B -git checkout -b允许您创建一个分支并同时切换到该分支。

什么时候使用?1- git branch当您想创建一个分支但停留在当前分支上时。要创建和切换时,请2- git checkout -b。如果您看一下,创建分支并切换到它很直观。所以选择是你的:)


4
这不会在2011
。– melpomene
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.