¿Cuál es la diferencia entre "git branch" y "git checkout -b"?

Respuestas:

259

git checkout -b BRANCH_NAMEcrea una nueva rama y comprueba la nueva rama mientras git branch BRANCH_NAMEcrea una nueva rama pero te deja en la misma rama.

En otras palabras, git checkout -b BRANCH_NAMEhace lo siguiente para usted.

git branch BRANCH_NAME    # create a new branch
git checkout BRANCH_NAME  # then switch to the new branch
Fatih Acet
fuente
44

git branch crea la rama pero usted permanece en la rama actual que ha desprotegido.

git checkout -b crea una rama y la revisa.

Podría considerarse una forma corta de:

git branch name
git checkout name
manojlds
fuente
Digamos más bien: "git branch crea la rama pero usted permanece en la rama actual DE LA QUE ha desprotegido".
Akash Verma
28
  • git branch: Muestra todas tus ramas
  • git branch newbranch: Crea una nueva sucursal
  • git checkout -b newbranch: Crea una nueva rama y cambia a esa rama inmediatamente. Esto es lo mismo que git branch newbranchseguido por git checkout newbranch.
Michel Pereira
fuente
24

Sintaxis completa:

git checkout -b [NEW_BRANCH] [FROM_BRANCH]

El [FROM_BRANCH] es opcional. Si no hay FROM_BRANCH, git usará la rama actual.

Tuong Le
fuente
7

También hay otra bandera para mencionar, que es relativa a estos ...

git checkout -B BRANCH_NAME

Este es un comando muy útil que he estado usando recientemente. Este comando verifica la rama que especifique y restablece la rama en función de la rama de origen.

ddavison
fuente
2
¿Puedes explicarme mas? No sé qué significa reiniciar para git
Mikaël Mayer
3
Del manual sobre 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 01 de
¿Quiere decir que puede reutilizar una sucursal existente?
Mikaël Mayer
1
¿Es checkout -Bpeligroso si la rama a la que te estás cambiando es compartida por otros? Utilicé esto recientemente y parecía fusionarse automáticamente en los cambios en mi otra rama a la rama a la que cambié.
Jeff
si obtiene otra rama de desarrolladores de forma remota, y git checkout -Bluego hace un sí, se fusionaría, o posiblemente incluso reemplazaría
ddavison
-1

Hay formas de ambos comandos que son similares (mirando git-scm docs Versión 2.11.1):

git branch <branchname> <start-point>

y

git checkout -b <new_branch> <start_point>

Este último ejecuta primero el comando de bifurcación y luego agrega el pago. En esa forma, se hace referencia explícita al documento de git-branch:

Al especificar -b, se crea una nueva rama como si se llamara a git-branch [2] y luego se desprotegiera

Pshemy108
fuente
1
Esto no agrega ninguna información nueva sobre la respuesta aceptada de 2011.
melpomene
Realmente agrega nueva información sobre el <punto de inicio>. Lo que personalmente encontré bastante útil para crear ramas en un objeto ubicado en otro lugar sin tener que pagar primero el objeto o mover la rama actual. Usar anotaciones como [FROM_BRANCH] cuando en realidad se refiere a la referencia git no es útil en mi opinión.
Pshemy108
El segundo argumento opcional no es relevante para la pregunta. Es lo mismo entre ambos comandos, y OP estaba pidiendo la diferencia. (Si realmente crees que es esencial, simplemente habría agregado un comentario a la respuesta aceptada).
Melpomene
-1

Esencialmente :

A-git branch te permite crear una rama simple y llanamente.

B -git checkout -b le permite crear una rama y cambiar a ella al mismo tiempo.

¿Cuándo usarás cuál? 1- git branch cuando quieras crear una rama pero mantente en la rama actual. 2- git checkout -b cuando quieras crear y cambiar. Si lo mira, es intuitivo crear una rama y cambiar a ella. Entonces la elección es tuya :)

usuario2238769
fuente
44
Esto no agrega ninguna información nueva sobre la respuesta aceptada de 2011.
melpomene