Una sucursal local es una sucursal que solo usted (el usuario local) puede ver. Existe solo en su máquina local.
git branch myNewBranch # Create local branch named "myNewBranch"
Una rama remota es una rama en una ubicación remota (en la mayoría de los casos origin
). Puede empujar la rama local recién creada myNewBranch
a origin
. Ahora otros usuarios pueden rastrearlo.
git push -u origin myNewBranch # Pushes your newly created local branch "myNewBranch"
# to the remote "origin".
# So now a new branch named "myNewBranch" is
# created on the remote machine named "origin"
Una rama de seguimiento remota es una copia local de una rama remota. Cuando myNewBranch
se presiona para origin
usar el comando anterior, origin/myNewBranch
se crea una rama de seguimiento remota llamada en su máquina. Esta rama de seguimiento remoto rastrea la rama remota myNewBranch
en origin
. Puede actualizar su rama de seguimiento remoto para que esté sincronizada con la rama remota usando git fetch
o git pull
.
git pull origin myNewBranch # Pulls new commits from branch "myNewBranch"
# on remote "origin" into remote tracking
# branch on your machine "origin/myNewBranch".
# Here "origin/myNewBranch" is your copy of
# "myNewBranch" on "origin"
Una rama de seguimiento local es una rama local que rastrea otra rama. Esto es para que pueda empujar / extraer confirmaciones hacia / desde la otra rama. Las sucursales de rastreo locales en la mayoría de los casos rastrean una sucursal de rastreo remota. Cuando se presiona una rama local para origin
utilizar el git push command
con una -u
opción (como se muestra arriba), se configura la rama local myNewBranch
de rastrear la rama seguimiento remoto origin/myNewBranch
. Esto es necesario para usar git push
y git pull
sin especificar un flujo ascendente para empujar o extraer.
git checkout myNewBranch # Switch to myNewBranch
git pull # Updates remote tracking branch "origin/myNewBranch"
# to be in sync with the remote branch "myNewBranch"
# on "origin".
# Pulls these new commits from "origin/myNewBranch"
# to local branch "myNewBranch which you just switched to.
Aquí está la respuesta larga.
Controles remotos:
Si está utilizando Git en colaboración, probablemente necesite sincronizar sus confirmaciones con otras máquinas o ubicaciones. Cada máquina o ubicación se llama remoto , en la terminología de Git, y cada una puede tener una o más ramas. Muy a menudo, solo tendrá uno, llamado
origin
. Para enumerar todos los controles remotos, ejecutegit remote
:Puede ver para qué ubicaciones son atajos estos nombres remotos, ejecutando
git remote -v
:Cada control remoto tiene un directorio en
git/refs/remotes/
:Ramas en su máquina:
TLDR: en su máquina local, tiene tres tipos de ramas: ramas locales sin seguimiento, ramas de seguimiento local y ramas de seguimiento remoto. En una máquina remota, solo tiene un tipo de rama.
1. sucursales locales
Puede ver una lista de todas las sucursales locales en su máquina ejecutando
git branch
:Cada sucursal local tiene un archivo debajo de
.git/refs/heads/
:Existen dos tipos de sucursales locales en su máquina: sucursales locales sin seguimiento y sucursales locales con seguimiento.
1.1 Sucursales locales sin seguimiento
Las sucursales locales sin seguimiento no están asociadas con ninguna otra sucursal. Creas uno corriendo
git branch <branchname>
.1.2. Seguimiento de sucursales locales
Las ramas locales de seguimiento están asociadas con otra rama, generalmente una rama de seguimiento remoto. Creas uno corriendo
git branch --track <branchname> [<start-point>]
.Puede ver cuál de sus sucursales locales está rastreando sucursales usando
git branch -vv
:Desde la salida de este comando, puede ver que la rama local
master
está rastreando la rama de seguimiento remotoorigin/master
, y la rama localnew-feature
no está rastreando nada.Otra forma de ver qué ramas están rastreando ramas es echar un vistazo
.git/config
.El seguimiento de las sucursales locales es útil. Le permiten ejecutar
git pull
ygit push
, sin especificar qué rama ascendente utilizar. Si la rama no está configurada para rastrear otra rama, obtendrá un error como este:2. Ramas de seguimiento remoto (todavía en su máquina)
Puede ver una lista de todas las ramas de seguimiento remoto en su máquina ejecutando
git branch -r
:Cada rama de seguimiento remoto tiene un archivo en
.git/refs/<remote>/
:Piense en sus ramas de seguimiento remoto como su caché local para lo que contienen las máquinas remotas. Puede actualizar sus ramas de seguimiento remoto utilizando
git fetch
, quegit pull
utiliza detrás de escena.A pesar de que todos los datos de una rama de seguimiento remoto se almacenan localmente en su máquina (como una caché), nunca se llama una rama local. (¡Al menos, no lo llamaría así!) Se llama una rama de seguimiento remoto.
Ramas en una máquina remota:
Puede ver todas las ramas remotas (es decir, las ramas en la máquina remota), ejecutando
git remote show <remote>
:Este
git remote
comando consulta a la máquina remota a través de la red sobre sus ramas. No actualiza las ramas de seguimiento remoto en su máquina local, usegit fetch
ogit pull
para eso.Desde la salida, puede ver todas las ramas que existen en la máquina remota mirando debajo del encabezado "Ramas remotas" (ignore las líneas marcadas como "obsoletas").
Si pudiera iniciar sesión en la máquina remota y encontrar el repositorio en el sistema de archivos, podría echar un vistazo a todas sus ramas
refs/heads/
.Hoja de trucos:
Para eliminar una sucursal local, ya sea de seguimiento o no, de forma segura:
Para eliminar una sucursal local, ya sea de seguimiento o no, de manera forzada:
Para eliminar una rama de seguimiento remoto:
Para crear una nueva sucursal local sin seguimiento:
Para crear una nueva rama de seguimiento local: (Tenga en cuenta que si
<start-point>
se especifica y es una rama de seguimiento remoto comoorigin/foobar
, entonces la--track
bandera se incluye automáticamente)Ejemplo:
Para eliminar una rama en una máquina remota:
Para eliminar todas las ramas de seguimiento remoto que están obsoletas, es decir, donde las ramas correspondientes en la máquina remota ya no existen:
Es posible que haya notado que en algunos comandos, se utiliza
<remote>/<branch>
, y otros comandos,<remote> <branch>
. Ejemplos:git branch origin/hello-kitty
ygit push --delete origin hello-kitty
.Puede parecer arbitrario, pero hay una manera simple de recordar cuándo usar una barra diagonal y cuándo usar un espacio. Cuando usa una barra oblicua, se refiere a una rama de seguimiento remoto en su propia máquina, mientras que cuando usa un espacio, en realidad está tratando con una rama en una máquina remota a través de la red.
fuente
Sucursal local:
Una rama en su máquina en la que puede trabajar y agregar commits. Puede enumerar estas ramas con
git branch
.Sucursal local (con seguimiento):
Una rama local ordinaria configurada para corresponder a una rama remota. Esto tiene beneficios como la capacidad de
git pull
ygit push
sin tener que especificar el repositorio y el nombre de la sucursal. El seguimiento también hacegit status
que te informe cuando tu sucursal está adelante o detrás del control remoto.Rama remota:
Simplemente una sucursal en un repositorio remoto, generalmente en un servidor como GitHub, etc.
Rama de seguimiento remoto:
Una copia local de una sucursal remota. Esta rama nunca debe ser editada. Su propósito es hacer un seguimiento del estado actual de una rama remota. Las ramas de seguimiento remoto se pueden ver
git branch -r
y, por lo general, tienen un aspecto similarorigin/master
(nombre del repositorio seguido de una barra inclinada seguida del nombre de la rama). La ejecucióngit fetch
actualizará las ramas de seguimiento remoto para reflejar el estado de las ramas remotas correspondientes.git branch -avv
es mi favorito personal para mostrar una descripción rápida de qué ramas están en mi máquina, qué ramas están en el control remoto y la última confirmación en cada una. La-a
parte especifica que se deben mostrar todas las ramas (remotas y locales). Losv
's en el extremo significan detallado (muestra el último hash y mensaje de confirmación). Gracias a @Flimm por señalar que el segundov
agrega información sobre qué sucursal local está rastreando qué control remoto.fuente