Git: actualización de información de sucursal remota

125

En un repositorio git, se eliminó una rama remota que no estoy rastreando. Cuando escribo

git branch -r

la rama eliminada todavía aparece (y puedo verificarlo)

¿Qué comando git debo ejecutar para actualizar esta información?

Bain Markev
fuente

Respuestas:

39

Si realizas algo como

git branch -d -r remote_name/branch_name

solo elimina su pago local. Este comando no hace nada al repositorio remoto, por lo que todavía aparece.

Solución:

git push origin :branch_name

eliminará la rama remota (tenga en cuenta el ':') y

git branch -d branch_name

eliminará tu pago local.

( Referencia )

Garrett Hyde
fuente
146
También puede ejecutar 'git remote prune origin' para limpiar sus referencias remotas.
cmcginty
3
Eso eliminará todas las ramas que ya no son rastreadas por el repositorio remoto. Entonces, solo ten cuidado.
Garrett Hyde
44
Creo que también es útil saber que, aunque es un poco más detallado, también puede usar git push <remote> --delete <branchname>para eliminar ramas remotas.
AeroCross
Esto generalmente funciona, pero hoy me encuentro con una situación en la que la lista remota no se actualizó, por lo que estaba tratando de eliminar una rama que no estaba allí. Por lo tanto, primero se requería la solución de @Flo a continuación .
dgo
284

Si se eliminaron ramas en el repositorio remoto y desea actualizar todas las ramas locales de seguimiento remoto a la vez, puede usar

$ git remote prune <remotename>

para eliminar todas las ramas de seguimiento remoto obsoletas para un control remoto dado (es decir, las que siguen a las ramas que se eliminaron en el repositorio remoto).

Ver git remotedocumentación.

Jakub Narębski
fuente
¡Gracias @Casey y @Jakub por tus respuestas! ¿Cómo es que la información de la sucursal remota almacenada localmente no se actualiza la próxima vez que la uso git fetch?
JJD
44
@JJD: Porque podría haber basado su trabajo en una rama remota que ya no está aquí. Desaparecer sin solicitar, por lo tanto, se pensó que era una mala idea. Es por eso que necesita podar explícitamente las ramas de seguimiento remoto.
Jakub Narębski
¿"Git gc" también limpia las ramas remotas rancias?
James Wald
@JamesWald: No, no lo hace. git gcsimplemente empaqueta objetos y referencias, y elimina objetos sin referencia mientras está en él (con cierto margen de seguridad).
Jakub Narębski
186
git remote update --prune

Debería actualizar las ramas de todos los controles remotos, agregar nuevas y eliminar las eliminadas.

Editar: el comando de actualización remota básicamente busca la lista de ramas en el control remoto. La --pruneopción eliminará las ramas de seguimiento remoto locales que apuntan a ramas que ya no existen en el control remoto .

Flo
fuente
Esto funcionó para mí. Necesitaba eliminar una rama remota que, por alguna razón, no podía eliminarse con el habitual 'git push origin: <branch_name>'
n0denine
¿Sería exacto decir que esta respuesta hace lo que hace la respuesta de Jakub Narębski y más? Es decir, ¿se poda y obtiene actualizaciones?
Frank Tan
14

También es útil para ver nuevas sucursales remotas:

git fetch --all
Aidan Donohoe
fuente
Esto me ayudó mucho. Algún error en Visual Studio git impide mostrar las nuevas ramas creadas después de la clonación. Este comando ayuda a mostrar las nuevas sucursales
Venkatesh Muniyandi
nice n simple thx dude, ten una insignia de bronce de respuesta en la casa :)
danday74
2

Puede combinar las banderas -ry -dpara eliminar ramas remotas.

Mikerobi
fuente
gran consejo! sin embargo, en este caso, hay varias ramas que ya se eliminaron, seguramente hay un comando para obtener estas actualizaciones
Bain Markev,
2

Prueba este comando

git gc --prune=now
MarceloCouto
fuente