¿Cómo elimino una rama de Git de forma local y remota?
-
18-09-2019 - |
Pregunta
Quiero eliminar una sucursal tanto de forma local como remota.
Intentos fallidos de eliminar la sucursal remota
$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.
$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.
$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).
$ git push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.
¿Qué debo hacer de manera diferente para eliminar exitosamente elremotes/origin/bugfix
sucursal tanto local como remotamente?
Solución
Resumen
$ git push --delete <remote_name> <branch_name>
$ git branch -d <branch_name>
Tenga en cuenta que en la mayoría de los casos el nombre remoto es origin
.
Eliminar rama local
Para eliminar el locales rama de un solo uso de los siguientes:
$ git branch -d branch_name
$ git branch -D branch_name
Nota: La opción -d
es un alias para --delete
, que sólo elimina la rama si ya ha sido totalmente fusionado en su rama ascendente. También es posible usar -D
, que es un alias para --delete --force
, lo que elimina la rama "con independencia de su condición resultante de la fusión." [Fuente: man git-branch
]
Eliminar Branch remoto [actualizado el 8-Sep-2017]
A partir de Git v1.7.0 , puede eliminar una a distancia rama utilizando
$ git push <remote_name> --delete <branch_name>
que podría ser más fácil de recordar que
$ git push <remote_name> :<branch_name>
que se añadió en Git v1.5.0 "para borrar una rama remota o una etiqueta."
A partir del Git V2.8.0 también se puede usar con la opción git push
-d
como un alias para --delete
.
Por lo tanto, la versión de Git ha instalado determinará si es necesario utilizar la sintaxis fácil o más difícil.
Eliminar Branch remoto [Respuesta original del 5-Ene-2010]
Desde el capítulo 3 de Pro Git por Scott Chacon:
Eliminación de las sucursales remotas
Supongamos que haya terminado con una rama a distancia - por ejemplo, usted y sus colaboradores terminado con una característica y se han fusionado en la rama principal de su mando a distancia (o cualquier rama de su código de línea estable está en). Puede eliminar una rama remota utilizando la sintaxis
git push [remotename] :[branch]
en lugar obtuso. Si desea eliminar su rama servidor-fix desde el servidor, se ejecuta el siguiente:$ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix
Boom. No más rama en su servidor. Es posible que desee oreja de perro esta página, dado que tiene ese comando, y es probable que se olvide de la sintaxis. Una manera de recordar este comando es recordando la sintaxis
git push [remotename] [localbranch]:[remotebranch]
que nos fuimos un poco más temprano. Si deja fuera de la parte[localbranch]
, a continuación, que está básicamente diciendo: “No lleven nada de mi lado y hacer que se[remotebranch]
.”
emití git push origin :bugfix
y funcionó muy bien. Scott Chacón tenía razón, me va a querer a oreja de perro esa página (o virtualmente oreja de perro por Para responder a esta desbordamiento de pila).
A continuación, debe ejecutar este en otras máquinas
git fetch --all --prune
para propagar los cambios.
Otros consejos
La respuesta de Mateo. es genial para eliminar remoto sucursales y también agradezco la explicación, pero para hacer una distinción simple entre los dos comandos:
Para eliminar un sucursal local desde tu máquina:
git branch -d {the_local_branch}
(usar -D
en lugar de forzar la eliminación de la rama sin verificar el estado de fusión)
Para eliminar un sucursal remota desde el servidor:
git push origin --delete {the_remote_branch}
Referencia: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote
Las respuestas cortas
Si desea una explicación más detallada de los siguientes comandos, a continuación, ver las largas respuestas en la siguiente sección.
Eliminación de una rama remota:
git push origin --delete <branch> # Git version 1.7.0 or newer
git push origin :<branch> # Git versions older than 1.7.0
Eliminación de una rama local:
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
Eliminación de una rama de seguimiento remoto local:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
La respuesta larga: hay 3 ramas diferentes para eliminar
Cuando usted está tratando con la eliminación de las ramas tanto local como remotamente, tenga en cuenta que hay 3 ramas diferentes implicados
- El
X
sucursal local. - El control remoto
X
rama de origen. - El local de
origin/X
rama remota de rastreo que rastrea elX
rama remota.
El cartel original utilizado
git branch -rd origin/bugfix
que sólo elimina su local de la rama remota de seguimiento origin/bugfix
, y no el bugfix
rama remota real en origin
.
Para eliminar esa rama remota real , es necesario
git push origin --delete bugfix
Detalles adicionales
Las siguientes secciones describen detalles adicionales a considerar cuando se eliminan sus sucursales remotas y remota de seguimiento.
Empujar para eliminar ramas remotas, también se eliminan las ramas de seguimiento remoto
Tenga en cuenta que la supresión de la X
rama remota desde la línea de comandos usando un git push
también eliminará la rama de seguimiento remoto local origin/X
, por lo que no es necesario podar la rama de seguimiento remoto obsoleta con git fetch --prune
o git fetch -p
, aunque no estaría de más si lo hizo de todos modos.
Puede verificar que éste también se eliminó origin/X
rama de seguimiento remoto ejecutando el siguiente:
# View just remote-tracking branches
git branch --remotes
git branch -r
# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a
La poda de las obsoletas origen de la rama de seguimiento a distancia / X
locales Si no elimina su X
rama remota desde la línea de comandos (como el anterior), entonces tu repositorio local todavía contener (a ahora obsoleto) de seguimiento remoto origin/X
rama. Esto puede ocurrir si ha borrado una rama remota directamente a través de la interfaz web de GitHub, por ejemplo.
Una forma típica de eliminar estas ramas de seguimiento remoto obsoletos (Git desde la versión 1.6.6) es simplemente ejecutar git fetch
con el --prune
o -p
más corto. Tenga en cuenta que esto elimina todas las ramas de seguimiento remoto local obsoletos de las sucursales remotas que ya no existen en el control remoto
git fetch origin --prune
git fetch origin -p # Shorter
Esta es la cita relevante de la 1.6.6 notas de (énfasis mío):
"git fetch"
--all
options--multiple
y aprendido, a buscarlo a correr muchos depósitos, y la opción de--prune
para eliminar seguimiento remoto ramas que fueron rancio. Estos hacen "actualización remota git" y "git ciruela remota "menos necesario (no hay un plan para eliminar" a distancia actualizar" ni "ciruela remota", sin embargo).
Alternativa a por encima de poda automática para ramas de seguimiento remotos obsoletos
Como alternativa, en lugar de la poda de sus ramas de seguimiento remoto local obsoletos a través git fetch -p
, se puede evitar que el funcionamiento de la red adicional con sólo la eliminación manual de la rama (s) con las banderas --remote
o -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Ver también
Pasos para la eliminación de una rama:
Para borrar el rama remota:
git push origin --delete <your_branch>
Para borrar el rama local , que tiene tres maneras
1: git branch -D <branch_name>
2: git branch --delete --force <branch_name> //same as -D
3: git branch --delete <branch_name> //error on unmerge
Explicar: Aceptar, simplemente explicar lo que está pasando aquí
Basta con hacer git push origin --delete
a eliminar su sucursal remota SOLAMENTE , agregue el nombre de la rama al final y esto va a eliminar y empujarlo a distancia al mismo tiempo. ..
Además, git branch -D
, que sólo tiene que borrar la rama local de sólo ...
-D
significa --delete --force
lo que eliminará la rama aún no se fusionó (fuerza de eliminar), pero también se puede utilizar -d
que significa --delete
que arrojan un error respectivo del estado de combinación rama ...
También se crea la imagen de abajo para mostrar los pasos:
También puede utilizar lo siguiente para eliminar la rama remota
git push --delete origin serverfix
que hace lo mismo que
git push origin :serverfix
pero puede que sea más fácil de recordar.
Consejo: Cuando se elimina ramas utilizando
git branch -d <branchname> # deletes local branch
o
git push origin :<branchname> # deletes remote branch
sólo se eliminan las referencias. A pesar de que la rama se elimina realmente en el control remoto las referencias a que todavía existe en los repositorios locales de miembros de su equipo. Esto significa que para otros miembros del equipo de las ramas eliminadas son todavía visibles cuando hacen un git branch -a
.
Para resolver este miembros de su equipo pueden podar las ramas eliminadas con
git remote prune <repository>
Esto es típicamente git remote prune origin
.
Si desea eliminar una rama, primera caja para la rama distinta de la rama que desea eliminar.
git checkout other_than_branch_to_be_deleted
Eliminación de la sección local:
git branch -D branch_to_be_deleted
Eliminación de la rama remota:
git push origin --delete branch_to_be_deleted
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Esto es sencillo: Simplemente ejecute el comando siguiente:
Para eliminar una rama Git tanto local como remotamente, primero elimine la sección local con el comando:
git branch -d example
(aquí example
es el nombre de la sucursal)
Y después de eso eliminar ramas utilizando el comando a distancia:
git push origin :example
Otro enfoque es: -
git push --prune origin
ADVERTENCIA:. Esto eliminará todas las sucursales remotas que no existen localmente O más integral,
git push --mirror
será efectivamente hacer que el repositorio remoto se parece a la copia local del repositorio (jefes locales, remotos y las etiquetas se reflejan en el control remoto).
Yo uso el siguiente en mi Bash :
alias git-shoot="git push origin --delete"
A continuación, puede llamar a:
git-shoot branchname
Desde enero de 2013, GitHub incluido un botón Eliminar rama junto a cada rama en su página "ramas".
Relevante entrada de blog: Crear y eliminar ramas
Eliminar localmente:
Para eliminar una sección local, puede utilizar:
git branch -d <branch_name>
Para eliminar una rama de la fuerza, en lugar de utilizar -D
-d
.
git branch -D <branch_name>
Eliminar de forma remota:
Hay dos opciones:
git push origin :branchname
git push origin --delete branchname
Yo sugeriría utiliza la segunda forma que es más intuitivo.
Si desea completar estas dos etapas con un solo comando, puede crear un alias para ello añadiendo el siguiente a su ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"
Como alternativa, se puede añadir a su configuración global de la línea de comandos utilizando
git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'
Nota: : Si se utiliza -d
(d minúscula), sólo se elimina la rama si se ha fusionado. Para forzar la eliminación suceda, tendrá que utilizar -D
(D mayúscula).
Para eliminar tu sucursal local y remotamente
Pagar en la sucursal maestra -
git checkout master
Elimina tu sucursal remota -
git push origin --delete <branch-name>
Elimina tu sucursal local -
git branch --delete <branch-name>
También puede hacerlo utilizando git remote prune origin
$ git remote prune origin
Pruning origin
URL: git@example.com/yourrepo.git
* [pruned] origin/some-branchs
ciruelas y elimina las ramas de seguimiento a distancia de una lista git branch -r
.
Además de las otras respuestas, a menudo uso la href="https://github.com/webmat/git_remote_branch" rel="noreferrer"> git_remote_branch herramienta Me parece que también utilizo el grb delete branch
publish
y comandos track
muy a menudo
Un trazador de líneas comando eliminar tanto local como remota:
D=branch-name; git branch -D $D; git push origin :$D
o agregue el alias a continuación a su ~/.gitconfig;uso: git kill branch-name
[alias]
kill = "!f(){ git branch -D \"$1\"; git push origin --delete \"$1\"; };f"
Vamos a suponer que nuestro trabajo en la rama de "formulario de contacto" que se hace y ya hemos integrado en "maestro". Puesto que no lo necesitamos más, podemos borrarlo (localmente):
$ git branch -d contact-form
Y para borrar la rama remota:
git push origin --delete contact-form
Eliminar rama remota
git push origin :<branchname>
Eliminar sucursal local
git branch -D <branchname>
Eliminar pasos de sucursal local:
- pagar en otra sucursal
- eliminar sucursal local
Simplemente decir:
git branch -d <branch-name>
git push origin :<branch-name>
git push origin --delete <branch Name>
es fácil de recordar que
git push origin :branchName
Ahora puede hacerlo con la GitHub escritorio aplicación.
Después de lanzar la aplicación
- Haga clic en el proyecto que contiene la rama
- Cambiar a la rama que desea borrar
- En el menú "Rama", seleccionar "Despublicar ...", que tiene la rama borrado de los servidores de GitHub.
- En el menú "Rama", seleccionar 'Borrar ' branch_name ' ...', al haber eliminado la rama apagado de su máquina local (también conocido como la máquina que está trabajando en ese momento) < a href = "https://i.stack.imgur.com/TTuLO.png">
Para eliminar localmente - (Normal),
git branch -d my_branch
Si su rama en el cambio de base / el progreso fusión y que no se hizo correctamente significa, obtendrá un error Rebase/Merge in progress
lo que en ese caso, usted no será capaz de eliminar su rama.
Así que, o su necesidad de resolver rebase / fusión de lo contrario se puede hacer mediante el uso de la fuerza en Eliminar,
git branch -D my_branch
Para eliminar en remoto:
git push --delete origin my_branch
puede hacer lo mismo usando,
git push origin :my_branch # easy to remember both will do the same.
Representación gráfica,
Esto no funcionará si tiene una etiqueta con el mismo nombre que la rama del mando a distancia:
$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to 'git@github.com:SomeName/some-repo.git'
En ese caso es necesario especificar que desea borrar la rama, no la etiqueta:
git push origin :refs/heads/branch-or-tag-name
Del mismo modo, para eliminar el comando en lugar de la rama se debería utilizar:
git push origin :refs/tags/branch-or-tag-name
Muchas de las otras respuestas dará lugar a errores / advertencias. Este enfoque es relativamente a prueba de tontos, aunque puede que todavía necesite git branch -D branch_to_delete
si no se fusionó plenamente en some_other_branch
, por ejemplo.
git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete
poda remoto no es necesaria si ha borrado la rama remota. Sólo se usa para obtener la mayoría hasta la fecha disponibles mandos a distancia en un repositorio que está realizando el seguimiento. He observado git fetch
agregará controles remotos, no eliminarlos. Aquí está un ejemplo de cuando git remote prune origin
realmente va a hacer algo:
El usuario A hace los pasos anteriores. El usuario B podría ejecutar los siguientes comandos para ver la información más sucursales remotas de la fecha
git fetch
git remote prune origin
git branch -r
Me harté de google para esta respuesta, así que tomó un enfoque similar la respuesta que crizCraig publicada anterior.
Se ha añadido el siguiente al perfil Bash:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
A continuación, cada vez que he terminado con una rama (fusionado en master
, por ejemplo) corro el siguiente en mi terminal:
gitdelete my-branch-name
... que luego se elimina my-branch-name
de origin
como, así como a nivel local.
Antes de ejecutar
git branch --delete <branch>
asegúrese de determinar primero cuál es el nombre exacto de la rama remota está ejecutando:
git ls-remote
Esto le dirá exactamente lo que debe introducir para el valor <branch>
. (branch
entre mayúsculas y minúsculas!)
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Si está seguro de que quiere eliminar, ejecute
git branch -D bugfix
Ahora que limpiar las sucursales remotas eliminados ejecutar
git remote prune origin
Mashup de todas las otras respuestas. Requiere Ruby 1.9.3+
, probado solamente en OS X.
Llamada este archivo git-remove
, hacerlo ejecutable, y lo puso en su camino. A continuación, utilice, por ejemplo, git remove temp
.
#!/usr/bin/env ruby
require 'io/console'
if __FILE__ == $0
branch_name = ARGV[0] if (ARGV[0])
print "Press Y to force delete local and remote branch #{branch_name}..."
response = STDIN.getch
if ['Y', 'y', 'yes'].include?(response)
puts "\nContinuing."
`git branch -D #{branch_name}`
`git branch -D -r origin/#{branch_name}`
`git push origin --delete #{branch_name}`
else
puts "\nQuitting."
end
end