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

260

我使用了git checkout -b来创建一个新的分支,我认为git branch也能实现同样的功能。 如果有区别,这两个命令之间有何不同?


https://www.atlassian.com/git/tutorials/using-branches - ΦXocę 웃 Пepeúpa ツ
7个回答

359

git checkout -b BRANCH_NAME 命令创建一个新分支并检出到该分支,而 git branch BRANCH_NAME 命令也会创建一个新分支,但不会切换到该分支。

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

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

不加 -b 开关使用 git checkout 命令,难道不是只从远程检出分支,以便我们在本地拥有它的副本吗? - quantum231
@quantum231 正确。-b 切换到刚创建的新分支副本。 - veritas
4
git switch -c BRANCH_NAME also works the same as git checkout -b BRANCH_NAME - Anthony Avila

65

git branch 命令创建分支,但你仍然停留在当前所检出的分支上。

git checkout -b 命令创建分支并切换到该分支。

可以看作是以下命令的简写形式:

git branch name
git checkout name

2
我们可以这样说: “git branch 命令创建了一个新分支,但你仍然停留在当前分支,也就是你刚才检出的分支。” - Akash Verma
1
@AkashVerma 如果您能详细说明为什么您在回答中坚持使用“FROM WHICH”,那对读者会很有帮助。 - ZeZNiQ

37
  • git branch: 显示所有分支
  • git branch newbranch: 创建新分支
  • git checkout -b newbranch: 创建新分支并立即切换到该分支。这与git branch newbranchgit checkout newbranch的组合是相同的。

36

完整语法:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

[FROM_BRANCH] 是可选项。如果没有指定 FROM_BRANCH,Git 将使用当前分支。


10

还有一个需要提到的旗帜,与这些相关。

git checkout -B BRANCH_NAME

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


2
你能解释得更详细些吗?我不知道 git 中的“reset”是什么意思。 - Mikaël Mayer
3
从Git手册中:如果使用-B选项,如果<new_branch>不存在,则创建它;否则,重置它。这相当于以下事务操作: $ git branch -f [] $ git checkout - ddavison
那么你的意思是可以重用现有的分支? - Mikaël Mayer
1
如果你使用checkout -B命令切换分支时,这个分支是与其他人共享的,那么它是否存在风险?我最近使用了这个命令,它似乎自动将我另一个分支的更改合并到了我切换到的分支中。 - Jeff
如果你从远程获取了另一个开发者的分支,并执行了 git checkout -B,那么它会合并,或者可能会替换。 - ddavison
1
checkout -B 不仅会在分支已经存在时切换分支,还会将目标分支重置为上一个分支(或指定的提交)。这也可能很危险,因为在较新的分支上重新运行 checkout -B 可能会将分支提交重置回上一个分支,这将删除最近的提交,如果上一个分支落后于当前分支。 - wesinat0r

-1

有两种类似的命令形式(参考git-scm文档版本2.11.1):

git branch <branchname> <start-point>

并且

git checkout -b <new_branch> <start_point>

后者先执行分支命令,然后再添加检出。在这种形式中,明确引用了git-branch的文档:

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


2
这并没有提供关于2011年已接受答案的新信息。 - melpomene
1
它确实为<start-point>添加了新信息。我个人发现这很有用,可以在没有先签出对象或移动当前分支的情况下,在其他位置的对象上创建分支。在实际表示git引用时使用[FROM_BRANCH]等符号是无用的。 - Pshemy108
1
可选的第二个参数与问题无关。两个命令之间是相同的,OP 正在询问它们之间的区别。(如果您真的认为它很重要,我会在被接受的答案中添加一条评论。) - melpomene

-1

本质上:

A-git分支让你轻松创建一个分支。

B-git checkout -b允许您创建一个分支并立即切换到它。

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


4
这并没有比2011年已接受的回答提供任何新的信息。 - melpomene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接