2010-07-12 16 views
9

Me pregunto, ¿cómo podría evitar una confirmación en cambios de código realmente pequeños? Por ejemplo, a veces extraño un espacio entre parámetros o ese tipo de formato de código diminuto. La razón por la que pregunto esto es porque más tarde tengo que enviar mis confirmaciones a un repositorio remoto y no quiero incluir esos pequeños cambios.¿Cómo evito cometer pequeños cambios en git?

¿Alguna idea? Gracias

+2

Consulte también http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 para comprimir confirmaciones – VonC

+0

También le recomendamos que agregue un enlace de precomisión para ayudarlo revisa tu estilo de codificación Con eso, puedes hacer que git se queje si intentas cometer un código que viola algunos estándares que has establecido. ¡En primer lugar, puede ayudar a evitar compromisos erróneos! El ejemplo de enlace previo a la confirmación ('.git/hooks/pre-commit.sample') busca elementos como espacios al final de las líneas. Podría ajustar la sangría de GNU en una secuencia de comandos, por ejemplo, para imponer un estilo de codificación específico, y poner eso en su gancho precompromiso. –

Respuesta

20

Actualización: Como han señalado otros, no vuelva a hacer ningún tipo de reescritura, o reescriba el historial de cualquier tipo si ha enviado a un origen remoto y ha compartido este código con otros desarrolladores. Respuesta corta: ¡es peligroso y arriesgado!

Recomiendo consultar el comando rebase para esto. Hace exactamente lo que está pidiendo

Lo que esto hace es tomar compromete más pequeños y combinarlas en los más grandes

utilizarlo:

git rebase -i HEAD~5 

su editor aparecerá con los últimos 5 commits del jefe de la rama actual, con algo de documentación. En su caso, querrá usar squash. El sitio he vinculado lo explica muy bien, tienen este ejemplo:

pick 01d1124 Adding license 
squash 6340aaa Moving license into its own file 
squash ebfd367 Jekyll has become self-aware. 
squash 30e0ccb Changed the tagline in the binary, too. 

Esto compromete empaquetar los 3 anteriores y poner a todos bajo el que usted ha marcado como pick. Luego puede modificar el mensaje de confirmación y demás.

Diviértete

+0

¿Por qué el voto a favor? – meagar

+0

+1. Aplastar es el camino a seguir. Más información aquí: http: //www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html – Jeet

+2

Haga lo que haga, * no * haga esto si ya ha enviado sus cambios: S – andrewdotnich

16

La única manera de hacer un cambio es con una confirmación. Sin embargo, puede modificar una confirmación anterior para incluir el nuevo cambio si lo desea. Esta puede ser la mejor solución cuando aún no ha enviado la confirmación previa a un repositorio remoto.

Hay buena información acerca de cómo modificar git commits in the Git user's manual y in a blog post.

+0

Gracias por los enlaces. Sin embargo, no me gusta [clickhere] estilo de enlace. Aquí hay un bookmarklet útil para generar enlaces descriptivos: [Copie el enlace de reducción o edítelo] (http://pastebin.com/qEafAErg) (enlace pastebin) – takeshin

3

Una de las mejores maneras de abordar esto es utilizar difftool git para funcionar como una herramienta visual xdiff o WinMerge en cada archivo modificado antes de comprometerse. Esto hace que sea fácil deshacer cambios menores y detectar cambios significativos que olvidó haber hecho y que no están listos. Capté una gran cantidad de errores de esta manera. Por ejemplo, una etiqueta html faltante o extra puede ser difícil de detectar cuando se mira el código, pero es fácil de detectar cuando se hace una diferencia.

+1

¿Hay alguna razón por la que no lo haría? solo uso 'git diff'? Ese es uno de sus propósitos principales ... – Cascabel

+0

@Jefromi, git diff no me permite editar código y revertir porciones de archivos. Además, considero que es mucho más útil contar con una diferencia paralela de los contenidos completos de los archivos, lo que me ayuda a detectar los errores que podría perder con una diferencia línea por línea (no me sorprendería si hay una opción para esto, pero no compensaría la falta de edición) – mikerobi

+0

¿Has probado git difftool? – bstpierre

Cuestiones relacionadas