Pregunta

Viniendo de SVN, que acaba de empezar a familiarizarse con git.

Cuando una rama se elimina en git, se lo quita de la historia?

En SVN, se puede recuperar fácilmente una rama por revertir la operación de eliminación (fusión inversa). Como todas las eliminaciones en el SVN, la rama se borra nunca, es sólo elimina del árbol actual.

Si la rama es en realidad elimina de la historia en git, lo que ocurre con los cambios que se fusionaron a partir de esa rama? Son retenidos?

¿Fue útil?

Solución

Las ramas son sólo punteros a commit en git. En git cada confirmación tiene un árbol de código fuente completo, es una estructura muy diferente de SVN en todas las ramas y las etiquetas (por convención) viven en '' carpetas separadas del depósito junto con el 'tronco' especial.

Si la rama se fusionó con otra rama antes de que se eliminó entonces todas las confirmaciones seguirá siendo accesible desde la otra rama cuando se elimina la primera rama. Siguen siendo exactamente como estaban.

Si la rama se elimina sin que se fusionaron en otra rama a continuación, los compromete en esa rama (hasta el punto en que el fork de un cometen es todavía alcanzable) dejará de ser visible.

Las confirmaciones todavía será retenido en el repositorio y es posible recuperarlos inmediatamente después de la eliminación, pero con el tiempo será basura recogida.

Otros consejos

En Git, las ramas son punteros sólo (Referencias) a commit en un gráfico acíclico dirigido (DAG) de confirmaciones. Esto significa que la supresión de una rama sólo elimina las referencias a las confirmaciones, que podrían hacer algunas comete en el DAG inalcanzable, por lo tanto invisible. Pero todos los envíos que se encontraban en una rama borrado todavía estarían en el repositorio, al menos hasta que compromete inalcanzables consiguen podadas (por ejemplo, utilizando git gc).

Tenga en cuenta que git branch -d se negaría a eliminar una rama si no se puede estar seguro de que la supresión no dejaría compromete inalcanzables. Es necesario utilizar el git branch -D más fuerte que la fuerza supresión de una rama si podría dejar compromete inalcanzables.

Tenga en cuenta también que compromete inalcanzables, si están presentes, son sólo esas confirmaciones entre la última punta de una rama eliminada y, o bien una confirmación que consiguió fusionó a otra biblioteca existente, cualquier etiquetados cometió, o el punto de ramificación; que sea posterior. Por ejemplo, en la siguiente situación:

----O----*----*----/M----*    <-- master <-- HEAD
     \            /
      \--.----.--/--x---y     <-- deleted branch

sólo se compromete 'x' e 'y' se convertiría en inalcanzable después de borrar la rama.

Si usted opere en un circuito eliminado dentro del período gc.reflogExpire, defecto de 90 días, que tendrían la última punta de una rama eliminada registrada en reflog cabeza (ver git reflog show HEAD o git log --oneline --walk-reflogs HEAD). Usted debe ser capaz de utilizar reflog HEAD para recuperar el puntero de borrado. Tenga en cuenta también que en este caso, se compromete inalcanzables en tan sólo una rama eliminada sería protegido de la poda (eliminación) en el plazo gc.reflogExpireUnreachable, que por defecto es de 30 días.

Si no puede encontrar la punta de una rama acaba de eliminar en reflog para la cabeza, se puede tratar de utilizar git fsck encontrar "inalcanzable cometer ", y examinar los (a través de git show <sha1> o git log <sha1>) para encontrar la punta de la rama eliminada.

Independiente de cómo se encuentre la punta de una rama eliminado, puede deshacer la eliminación, o más bien volver a crear una rama acaba de eliminar utilizando

git branch <deleted-branch> <found-sha1-id>

Nota sin embargo, que reflog de una rama se perdería.


También hay git-resurrect.sh guión en contrib/ que ayuda a encontrar las huellas de una punta de la rama con nombre dado y resucitar (recuperar) la misma.

Si usted está preocupado por las ramas borrados accidentalmente y no tiene una copia local de su cesión temporal por más tiempo, hay extensiones a la empresa servidores Git como Gerrit que detectará reescribe la historia y supresiones de rama, serán los respalde bajo un ref especial de modo que puedan ser restaurados si es necesario y no serán podados por la recolección de basura. administradores Gerrit todavía puede quitar compromete seleccionado si es necesario por razones legales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top