remote - ¿Cómo elimino una sucursal de Git de forma local y remota?
git push example (30)
Quiero eliminar una rama tanto localmente como en mi proyecto remoto en GitHub .
Intentos fallidos para eliminar la rama 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 con éxito los remotes/origin/bugfix
branch tanto localmente como en GitHub?
Las respuestas cortas
Si desea explicaciones más detalladas de los siguientes comandos, consulte las respuestas largas en la siguiente sección.
Eliminar 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
Eliminar una sucursal local:
git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches
Eliminar una rama local de seguimiento remoto:
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 se trata de eliminar sucursales de forma local y remota, tenga en cuenta que hay 3 sucursales diferentes involucradas :
- La rama local
X
- La rama de origen remoto
X
- El
origin/X
rama de seguimiento remoto local que rastrea la ramaX
remota.
El cartel original utilizado.
git branch -rd origin/bugfix
que solo eliminó su origin/bugfix
rama de seguimiento remoto local , y no la bugfix
de bugfix
rama remota real en el origin
.
Para eliminar esa rama remota real , necesita
git push origin --delete bugfix
Detalles adicionales
Las siguientes secciones describen los detalles adicionales que se deben tener en cuenta al eliminar sus sucursales remotas y de seguimiento remoto.
Al pulsar para eliminar las ramas remotas también se eliminan las ramas de seguimiento remoto
Tenga en cuenta que eliminar la rama X
remota de la línea de comando con un git push
también eliminará el origin/X
rama de seguimiento remoto local , por lo que no es necesario eliminar la rama de seguimiento remoto obsoleta con git fetch --prune
o git fetch -p
, aunque no dolería si lo hicieras de todos modos.
Puede verificar que el origin/X
rama de seguimiento remoto también se eliminó ejecutando lo 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
Poda el origen de la rama de seguimiento remoto local obsoleto / X
Si no eliminó su rama X
remota de la línea de comando (como arriba), entonces su repositorio local seguirá conteniendo (una fuente ahora obsoleta) la rama origin/X
seguimiento remoto. Esto puede suceder si elimina una sucursal remota directamente a través de la interfaz web de GitHub, por ejemplo.
Una forma típica de eliminar estas ramas de seguimiento remoto obsoletas (desde la versión 1.6.6 de Git) es simplemente ejecutar git fetch
con --prune
o --prune
-p
. Tenga en cuenta que esto elimina todas las ramas de seguimiento remoto locales obsoletas para cualquier rama remota que ya no existe en el control remoto :
git fetch origin --prune
git fetch origin -p # Shorter
Aquí está la cita relevante de las notas de la versión 1.6.6 (énfasis mío):
"git fetch" aprendió las opciones
--multiple
y--multiple
, para ejecutar la búsqueda desde muchos repositorios, y la opción--prune
para eliminar las ramas de seguimiento remotas que quedaron obsoletas. Esto hace que la "actualización remota de git" y la "poda remota de git" sean menos necesarias (aunque no hay un plan para eliminar la "actualización remota" ni la "poda remota").
Alternativa a la poda automática anterior para ramas obsoletas de seguimiento remoto
Como alternativa, en lugar de podar sus sucursales obsoletas de seguimiento remoto a través de git fetch -p
, puede evitar realizar la operación adicional de la red simplemente eliminando manualmente las sucursales con las --remote
o -r
:
git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter
Ver también
Resumen ejecutivo
$ 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 sucursal local
Para eliminar la rama local use uno de los siguientes:
$ git branch -d branch_name
$ git branch -D branch_name
Nota: La opción -d
es un alias para --delete
, que solo elimina la rama si ya se ha fusionado completamente en su rama ascendente. También puede usar -D
, que es un alias para --delete --force
, que elimina la rama "independientemente de su estado fusionado". [Fuente: man git-branch
]
Delete Remote Branch [Actualizado el 8-Sep-2017]
A partir de Git v1.7.0 , puede eliminar una rama remota usando
$ git push <remote_name> --delete <branch_name>
lo que podría ser más fácil de recordar que
$ git push <remote_name> :<branch_name>
que se agregó en Git v1.5.0 "para eliminar una rama remota o una etiqueta".
A partir de Git v2.8.0 también puede usar git push
con la opción -d
como alias para --delete
.
Por lo tanto, la versión de Git que haya instalado determinará si necesita usar la sintaxis más fácil o más difícil.
Eliminar rama remota [Respuesta original del 5 de enero de 2010]
Del capítulo 3 de Pro Git por Scott Chacon:
Eliminar sucursales remotas
Supongamos que ha terminado con una rama remota; digamos, usted y sus colaboradores han terminado con una función y la han combinado en la rama maestra de su control remoto (o en cualquier rama en la que se encuentre la línea de código estable). Puede eliminar una rama remota usando la sintaxis bastante obtusa
git push [remotename] :[branch]
. Si desea eliminar su rama serverfix del servidor, ejecute lo siguiente:
$ git push origin :serverfix To [email protected]:schacon/simplegit.git - [deleted] serverfix
Auge. No más sucursales en tu servidor. Es posible que desee escuchar esta página, porque necesitará ese comando, y probablemente olvidará la sintaxis. Una forma de recordar este comando es recordando la
git push [remotename] [localbranch]:[remotebranch]
que revisamos un poco antes. Si dejas de lado la parte[localbranch]
, entonces básicamente estás diciendo: "No tomes nada de mi parte y haz que sea[remotebranch]
".
Emití git push origin :bugfix
y funcionó a la perfección. Scott Chacón tenía razón: querría escuchar esa página (o prácticamente una oreja de perro al responder esto en ).
Entonces deberías ejecutar esto en otras máquinas.
git fetch --all --prune
para propagar los cambios.
Pasos para eliminar una rama:
para borrar la rama remota:
git push origin --delete <your_branch>
Para eliminar la sucursal local , tienes tres formas:
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
Explique: OK, solo explique lo que está pasando aquí!
Simplemente haga git push origin --delete
para eliminar su rama remota SOLAMENTE , agregue el nombre de la rama al final y esto se eliminará y lo empujará a control remoto al mismo tiempo ...
Además, git branch -D
, que simplemente elimina la rama local SOLAMENTE ! ...
-D
significa --delete --force
que eliminará la rama incluso si no está fusionada (forzar eliminar), pero también puede usar -d
que significa --delete
que arroja un error respectivo del estado de combinación de la rama ...
También creo la imagen de abajo para mostrar los pasos:
Además de las otras respuestas, a menudo uso la herramienta git_remote_branch . Es una instalación adicional, pero le brinda una forma conveniente de interactuar con sucursales remotas. En este caso, para eliminar:
grb delete branch
Me parece que también uso los comandos de publish
y track
bastante frecuencia.
Ahora puedes hacerlo con la aplicación GitHub Desktop .
Después de lanzar la aplicación
- Haga clic en el proyecto que contiene la rama.
- Cambie a la rama que desea eliminar
- En el menú "Rama", seleccione "Anular publicación ..." para eliminar la bifurcación de los servidores de GitHub.
- En el menú "Sucursal", selecciona "Eliminar" nombre de sucursal "..." para eliminar la sucursal de tu máquina local (también conocida como la máquina en la que estás trabajando actualmente)
Antes de ejecutar
git branch --delete <branch>
asegúrese de determinar primero cuál es el nombre EXACTO de la rama remota ejecutando:
git ls-remote
Esto le dirá qué debe introducir EXACTAMENTE para el valor de <branch>
. (¡La branch
es sensible a mayúsculas!)
Consejo: Cuando borres ramas usando
git branch -d <branchname> # deletes local branch
o
git push origin :<branchname> # deletes remote branch
solo se borran las referencias. A pesar de que la rama se elimina realmente en el control remoto, las referencias a ella todavía existen en los repositorios locales de los miembros de su equipo. Esto significa que para otros miembros del equipo, las ramas eliminadas aún son visibles cuando hacen una git branch -a
.
Para resolver esto, los miembros de su equipo pueden podar las ramas eliminadas con
git remote prune <repository>
Esto suele ser git remote prune origin
.
Desde enero de 2013, GitHub incluyó un botón Eliminar rama junto a cada rama en su página de "Ramas".
Publicación de blog relevante: crear y eliminar ramas
Eliminar rama remota
git push origin :<branchname>
Eliminar rama local
git branch -D <branchname>
Eliminar los pasos de la rama local:
- Salida a otra sucursal
- eliminar rama local
Esto es simple: simplemente ejecute el siguiente comando:
Para eliminar una sucursal de Git local y remotamente, primero elimine la sucursal local usando el comando:
git branch -d example
(aquí el example
es el nombre de la rama)
Y después de eso elimine la rama remota usando el comando:
git push origin :example
Esto no funcionará si tiene una etiqueta con el mismo nombre que la rama en el control remoto:
$ 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 ''[email protected]:SomeName/some-repo.git''
En ese caso, debe especificar que desea eliminar la rama, no la etiqueta:
git push origin :refs/heads/branch-or-tag-name
Del mismo modo, para eliminar la etiqueta en lugar de la rama que utilizarías:
git push origin :refs/tags/branch-or-tag-name
La respuesta de Matthew es excelente para eliminar ramas remotas y también aprecio la explicación, pero para hacer una distinción simple entre los dos comandos:
Para eliminar una sucursal local de su máquina:
git branch -d {the_local_branch}
(use -D
lugar para forzar la eliminación de la rama sin verificar el estado fusionado)
Para eliminar una rama remota del servidor:
git push origin --delete {the_remote_branch}
Referencia: https://makandracards.com/makandra/621-git-delete-a-branch-local-or-remote
Mashup de todas las otras respuestas. Requiere Ruby 1.9.3+, probado solo en OS X.
Llame a este archivo git-remove
, conviértalo en ejecutable y póngalo en su ruta. Luego usa, 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
Me cansé de buscar en Google para esta respuesta, por lo que adopté un enfoque similar a la respuesta que publicaba anteriormente.
Agregué lo siguiente a mi perfil de Bash:
function gitdelete(){
git push origin --delete $1
git branch -D $1
}
Luego, cada vez que termino con una rama (fusionada en master
, por ejemplo) ejecuto lo siguiente en mi terminal:
gitdelete my-branch-name
... que luego elimina my-branch-name
desde el origin
, así como a nivel local.
Muchas de las otras respuestas conducirán a errores / advertencias. Este enfoque es relativamente some_other_branch
, aunque es posible que aún necesite git branch -D branch_to_delete
si no está completamente fusionado en some_other_branch
, por ejemplo.
git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete
No se necesita la poda remota si elimina la rama remota. Solo se utiliza para obtener los controles remotos más actualizados disponibles en un repositorio que está siguiendo. He observado que git fetch
agregará controles remotos, no los eliminará. Aquí hay un ejemplo de cuando git remote prune origin
realmente hará algo:
El usuario A realiza los pasos anteriores. El usuario B ejecutaría los siguientes comandos para ver las sucursales remotas más actualizadas
git fetch
git remote prune origin
git branch -r
Otro enfoque es
git push --prune origin
ADVERTENCIA: Esto eliminará todas las ramas remotas que no existen localmente. O más ampliamente,
git push --mirror
efectivamente hará que el repositorio remoto se vea como la copia local del repositorio (los jefes locales, los controles remotos y las etiquetas se reflejan en el control remoto).
Para eliminar su sucursal localmente y remotamente
Checkout to master branch -
git checkout master
Elimine su rama remota -
git push origin --delete <branch-name>
Elimine su sucursal local - rama de
git branch --delete <branch-name>
-git branch --delete <branch-name>
Si desea completar estos dos pasos con un solo comando, puede crear un alias para ello agregando lo siguiente a su ~/.gitconfig
:
[alias]
rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"
Alternativamente, puede agregar esto a su configuración global desde la línea de comando usando
git config --global alias.rmbranch /
''!f(){ git branch -d ${1} && git push origin --delete ${1}; };f''
NOTA : Si utiliza -d
(d minúscula), la rama solo se eliminará si se ha fusionado. Para forzar la eliminación, tendrá que usar -D
(D mayúscula).
Si desea eliminar una rama, primero realice el proceso de pago en la rama que no sea la rama que desea eliminar.
git checkout other_than_branch_to_be_deleted
Eliminando la sucursal local:
git branch -D branch_to_be_deleted
Eliminando la rama remota:
git push origin --delete branch_to_be_deleted
Simplemente diga:
git branch -d <branch-name>
git push origin :<branch-name>
También puede utilizar lo siguiente para eliminar la rama remota.
git push --delete origin serverfix
Lo que hace lo mismo que
git push origin :serverfix
pero puede ser más fácil de recordar.
También puedes hacer esto usando git remote prune origin
:
$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
* [pruned] origin/some-branchs
Se poda y elimina las ramas de seguimiento remoto de una lista de git branch -r
.
Uso lo siguiente en mi configuración de Bash :
alias git-shoot="git push origin --delete"
Entonces puedes llamar:
git-shoot branchname
Asumamos que nuestro trabajo en la rama "formulario de contacto" está terminado y ya lo hemos integrado en "maestro". Como ya no lo necesitamos, podemos eliminarlo (localmente):
$ git branch -d contact-form
Y para borrar la rama remota:
git push origin --delete contact-form
Eliminar localmente:
Para eliminar una rama local, puede utilizar:
git branch -d branch_name
Para eliminar una rama por la fuerza, use -D
lugar de -d
.
git branch -D branch_name
Eliminar de forma remota:
Hay dos opciones:
git push origin :branchname
git push origin --delete branchname
Le sugiero que utilice la segunda forma, ya que es más intuitivo.
Para eliminar localmente - (Normal),
git branch -d my_branch
Si su sucursal está en proceso de rebasar / fusionar y eso no se hizo correctamente significa que recibirá un Rebase/Merge in progress
error Rebase/Merge in progress
por lo que, en ese caso, no podrá eliminar su sucursal.
Entonces, ya sea su necesidad de resolver la reorganización / fusión, de lo contrario puede forzar la eliminación usando,
git branch -D my_branch
Para borrar 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 grafica,
Un comando de línea elimina tanto local como remoto :
D=branch-name; git branch -D $D; git push origin :$D
o agrega el alias a continuación a tu ~ / .gitconfig ; uso: git kill branch-name
[alias]
kill = "!f(){ git branch -D /"$1/"; git push origin --delete /"$1/"; };f"
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
git push origin --delete branchName
es más fácil de recordar que
git push origin :branchName
git push origin :bugfix # Deletes remote branch
git branch -d bugfix # Must delete local branch manually
Si está seguro de que quiere borrarlo, ejecute
git branch -D bugfix
Ahora para limpiar las sucursales remotas ejecutadas
git remote prune origin