¿Cuál es el beneficio del proceso de confirmación en dos etapas de git (puesta en escena)?

166

Estoy aprendiendo git y he notado que tiene un proceso de confirmación de dos pasos:

  1. git add <files>
  2. git commit

El primer paso coloca las revisiones en lo que se denomina "área de preparación" o "índice".

Lo que me interesa es por qué se toma esta decisión de diseño y cuáles son sus beneficios.

Además, como usuario de git, ¿haces esto o simplemente usas git commit -a ?

Pido esto porque vengo de bzr (Bazar) que no tiene esta característica.

    
pregunta thomasrutter 18.04.2011 - 10:46
fuente

4 respuestas

79

Dividir el trabajo en confirmaciones separadas. Es probable que haya abierto un archivo muchas veces para escribir una corrección de una sola línea, pero al mismo tiempo que descubrió que el formato era incorrecto, podría haber cierta documentación. Mejorado, o alguna otra corrección no relacionada. Con otros RCS s tendrías que escribir eso o memorizarlo, terminar la solución para la que vino, cometa eso, y luego vuelva a arreglar las otras cosas (o cree una bola de mudanza con cosas no relacionadas). Con Git solo arreglas todo de una vez, y Stage + confirma la línea individual por separado, con git add -i o git-gui .

No rompas la compilación. Estás trabajando en una modificación complicada. Así que intentas cosas diferentes, algunas de las cuales funcionan mejor que otras, otras que rompen cosas. Con Git, pondría en escena las cosas cuando la modificación mejoró las cosas, y checkout (o modificó un poco más) cuando la modificación no funcionó. No tendrá que confiar en la funcionalidad de deshacer del editor, puede checkout el repositorio completo en lugar de solo archivo por archivo, y cualquier error de nivel de archivo (como eliminar un archivo que no se haya confirmado o guardado) cerrando después de una mala modificación) no se pierde mucho trabajo.

    
respondido por el l0b0 18.04.2011 - 11:38
fuente
63

Uno de los beneficios para mí es la capacidad de "agregar" archivos progresivamente. Antes de comprometerme reviso cada archivo. Una vez revisado el archivo, lo añado. Cuando git status o git diff , git me muestra solo los archivos que se han modificado y no se han agregado todavía. Cuando haya revisado todos los archivos y los haya agregado, puedo comprometerme.

Así que sí, encuentro que el área de preparación es muy útil.

Y no, nunca uso git commit -a . Sin embargo, a menudo utilizo git add -u . De esta manera todavía puedo visualizar lo que se debe confirmar.

    
respondido por el David 18.04.2011 - 11:13
fuente
21

El beneficio es bastante simple: te da control total sobre qué archivos quieres cometer cuándo. En ese caso, puede usar git add -p para controlar qué líneas quiere cometer.

    
respondido por el Rein Henrichs 18.04.2011 - 18:14
fuente
1

Uno de los beneficios que me gustan es la capacidad de cometer una parte de un cambio. Es decir, usando git add -e. No me comprometo tan a menudo como debería, y el comando git add -e me permite desentrañar mis cambios en cierta medida.

    
respondido por el leed25d 19.04.2011 - 01:54
fuente

Lea otras preguntas en las etiquetas