Estoy aprendiendo git y noté que tiene un proceso de confirmación de dos pasos:
git add <files>
git commit
El primer paso coloca revisiones en lo que se llama un "área de ensayo" 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 lo usas git commit -a
?
Pregunto esto porque vengo de bzr (Bazar) que no tiene esta característica.
version-control
git
workflows
thomasrutter
fuente
fuente
git add -p
, puede elegir confirmar una parte de un archivo sin comprometer otra parte del mismo archivo .git status
y posiblementegit push
. Para todo el bombo sobre git, (y el código para compartir de GitHub es maravilloso) las partes son muy molestasRespuestas:
Dividir el trabajo en commits separados. Probablemente haya abierto muchas veces un archivo para escribir una corrección de una sola línea, pero al mismo tiempo descubrió que el formato era incorrecto, que podría mejorarse alguna documentación u otra corrección no relacionada. Con otros RCS , tendrías que escribir eso o guardarlo en la memoria, terminar la reparación por la que viniste, comprometerlo y luego volver a arreglar las otras cosas (o crear un compromiso de bola de barro 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
ogit-gui
.No rompas la construcción. Estás trabajando en una modificación complicada. Así que intentas cosas diferentes, algunas de las cuales funcionan mejor que otras, algunas que rompen cosas. Con Git, organizaría las cosas cuando la modificación mejorara las cosas y
checkout
(o modificara un poco más) cuando la modificación no funcionara. No tendrá que confiar en la funcionalidad de deshacer del editor, puede hacercheckout
el repositorio completo en lugar de solo archivo por archivo, y cualquier error a nivel de archivo (como eliminar un archivo que no se ha confirmado o guardar + cerrar después de un mala modificación) no lleva a perder mucho trabajo.fuente
git add -i
con un commit de una sola etapa? Simplemente elegiría un montón de archivos (o líneas dentro de los archivos) relacionados con una sola característica, y realizaría una confirmación. Luego volvería y haría una segunda confirmación relacionada con otra función ..git-branch
tipo ( jovicailic.org/2017/04/vim-persistent-undo ). Además, su historial de deshacer se rastrea automáticamente cada vez que entra en modo normal. Por lo tanto, reduce su carga mental de tener que crear "puntos de deshacer manuales". ¿Por qué el uso de sus editores "deshacer" buffers no es tan metódico?Una de las ventajas para mí es la capacidad de "agregar" archivos progresivamente. Antes de comprometerme, reviso cada archivo. Una vez que se revisa el archivo, lo agrego. Cuando yo
git status
ogit diff
, git me muestra solo los archivos que se han modificado y que aún no se han agregado. Cuando haya revisado todos los archivos y los haya agregado, entonces puedo confirmar.Entonces sí, encuentro que el área de preparación es muy útil.
Y no, nunca lo uso
git commit -a
. Sin embargo, a menudo lo usogit add -u
. De esta manera todavía puedo visualizar lo que se debe comprometer.fuente
El beneficio es bastante simple: le da control total sobre qué archivos desea confirmar cuando. Para el caso, puede usar
git add -p
para controlar qué líneas desea confirmar.fuente
.gitignorelines
para que pudieras hacer cambios locales en las líneas individuales que podrían sobrevivir a las confirmaciones y permanecer intactas.app.conf
que contiene las cosas que desea compartir, y luego unadb.conf
que acaba de poner en la lista .gitignore. Problema resuelto. Si está utilizando algo patentado, realmente debería considerar obtener algo tan simple allí. O póngalo a través de un preprocesador en un evento de precompilación. Muchas soluciones allí.Uno de los beneficios que me gusta es la capacidad de cometer una parte de un cambio. Es decir, usando git add -e. A veces no me comprometo tan a menudo como debería, y el comando git add -e me permite desentrañar mis cambios hasta cierto punto.
fuente