En nuestro repositorio GitHub, un compañero de trabajo sacó una rama llamada release
. Pero cuando ejecuto git checkout release
localmente, siempre obtengo la rama eliminada release
. Igual, incluso cuando revisé otra rama, eliminé la release
rama con git branch -D release
y corrí nuevamente git checkout release
.
¿Hay algo que arreglar en el repositorio de GitHub, o debo arreglar algo localmente?
git branch --remote
salida, después de corrergit fetch
? Es posible que deba podargit fetch -p
para olvidar las ramas remotas eliminadas.git branch --remote
salidaorigin/release
. ¿Quiere ejecutargit fetch -p
sin argumentos adicionales y eliminará todas las ramas remotas eliminadas?git fetch -p
sin argumentos adicionales se podarán todas las ramas remotas eliminadas.Respuestas:
Después de eliminar una rama en el lado remoto, aún puede ver esta rama remota anteriormente recuperada localmente, vea:
Solo eliminó el "lanzamiento" pero no el "control remoto / origen / lanzamiento". Eliminarlo así:
O elimine todas las ramas recuperadas que ya no existen en el lado remoto:
fuente
git branch -rd origin/release
, ¿qué-r
significa? ¿-d
Significa lo mismo que-D
? Segit branch -rd origin/release
puede reemplazar congit branch -d remotes/origin/release
?List or delete (if used with -d) the remote-tracking branches.
; -D:Shortcut for --delete --force.
git branch -rd origin/release
puede reemplazar congit branch -d remotes/origin/release
?-r
refiere a ramas remotas , es necesario. Las ramas locales y remotas se almacenan en diferentes directorios, compararls -l .git/refs/heads
yls -l .git/refs/remotes
. También podría tener una rama local llamadaremotes/origin/release
que se eliminaría sin-r
. Esto puede sonar confuso, pero puedes jugar, crear ramas con nombres extraños y ver cómo se ve.git/
.Cuando las ramas se eliminan de forma remota, debe podar su repositorio local; la forma más fácil de hacerlo es con
Esto actualizará su repositorio local con todos los cambios realizados en el repositorio remoto, pero sin actualizar ninguna de sus sucursales locales. Después de ejecutar esto,
ya no mostrará la rama remota eliminada.
Los repositorios de git están completos, ya sea en su propio sistema o en el servidor. Entonces, cuando clonas por primera vez un repositorio, obtienes una copia completa, y tu git local "sabe" acerca de todas las ramas remotas, así como tus ramas locales. Esta información no se sincroniza automáticamente, por lo que cuando su colega eliminó la
release
rama en el servidor, su repositorio git local no perdió su noción de unarelease
rama remota . La sincronización con lasgit fetch
actualizaciones de toda la información local en las sucursales remotas para que coincidan con el estado del servidor (estrictamente hablando, repositorio remoto, donde sea que esté), pero sin eliminar ninguna información local en las sucursales remotas. La poda congit fetch -p
(ogit fetch --prune
, ogit remote prune
) elimina la información local en ramas remotas que se han eliminado.fuente
-p
(--prune
) obliga a eso.release
rama degit branch -D release
antes degit checkout release
hacergit checkout release
dejar de recibir larelease
rama?git checkout release
volverá a crear automáticamente una rama si hay una rama remota con ese nombre.git branch -D release
ya ha eliminado larelease
rama en mi repositorio local; Si es esto último, un compañero de trabajo ha eliminado larelease
rama en GitHub; Así que todavía no estoy seguro de por qué "volverá a crear automáticamente una rama si hay una rama remota con ese nombre".Tim: Git se distribuye VCS, por lo que cuando clonas un repositorio de remoto a tu local, clona todo (historial). Entonces, cuando clonaste tu repositorio, tenía una rama llamada lanzamiento. Desde que su colega eliminó la rama de lanzamiento de forma remota, hasta que haga una poda
git fetch -p
o elimine esa rama explícitamente, su local tendrá esa rama.fuente
Quizás un poco tangencial, pero la perspectiva de este sitio podría ayudar a comprender el tema general de la eliminación de ramas:
http://railsware.com/blog/2014/08/11/git-housekeeping-tutorial-clean-up-outdated-branches-in-local-and-remote-repositories/
Hay una superposición con algunos de los temas que ya se han discutido aquí, pero el enfoque está en la limpieza: eliminar sucursales, remotas y locales, que ya no son necesarias en un entorno colaborativo. En particular, el
git branch --merged
comando identifica ramas que son seguras para eliminar debido a la fusión con su línea principal (o cualquier rama que le interese). Si está colaborando, algunos mini guiones más elegantes como este presentarán las cosas en un formato agradable y digerible con fechas y autores.(Lamentablemente, "agradable, digerible" no se aplica al formato de los propios scripts).
fuente