tipos tag etiquetas crear git commit-message

tag - ¿Cómo edito un mensaje de confirmación incorrecto en git(que he presionado)?



git tag (6)

(De http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )

Cómo cambiar compromete más profundamente en la historia

Dado que el historial en Git es inmutable, la corrección de todo lo que no sea la confirmación más reciente (confirmación que no es un encabezado) requiere que el historial se reescriba desde la confirmación modificada y la reenvíe.

Puede usar StGIT para eso, inicializar la bifurcación si es necesario, comprometerse hasta el compromiso que desea cambiar, abrirlo si es necesario, hacer un cambio y luego refrescar el parche (con la opción -e si desea corregir el mensaje de confirmación), luego presione todo y stg commit.

O puede usar rebase para hacer eso. Crea una nueva bifurcación temporal, rebobina la confirmación que deseas cambiar usando git reset --hard, cambia esa confirmación (sería la parte superior de la cabecera actual), luego modifica la bifurcación en la parte superior de la confirmación modificada, usando git rebase --onto.

O puede usar git rebase --interactive, que permite varias modificaciones como el reordenamiento de parches, el colapso, ...

Creo que debería responder tu pregunta. Sin embargo, tenga en cuenta que si ha insertado el código en un repositorio remoto y la gente lo ha extraído, esto arruinará sus historiales de códigos, así como el trabajo que han realizado. Así que hazlo con cuidado.

Quiero modificar un mensaje de compromiso más profundo en la historia y he empujado muchas nuevas confirmaciones.

¿Cómo cambio el mensaje de confirmación? ¿Es posible?


El mensaje de Linus Torvalds puede responder a su pregunta:

Modificar / editar mensajes de confirmación antiguos

Respuesta corta: no se puede (si se presiona).

extracto (Linus se refiere a BitKeeper como BK):

Nota al margen, solo por interés histórico: en BK podrías.

Y si estás acostumbrado (como yo) fue realmente bastante práctico. Aplicaría una bomba de parche de Andrew, notaría que algo estaba mal, y simplemente lo editaría antes de sacarlo.

Pude haber hecho lo mismo con git. Hubiera sido bastante fácil hacer que el mensaje de compromiso no fuera parte del nombre, y aún garantizar que el historial no se haya tocado, y permitir la opción "arreglar comentarios más tarde".

Pero no lo hice

Parte de esto es puramente "consistencia interna". Git es simplemente un sistema más limpio gracias a que todo está protegido por SHA1, y todos los objetos reciben el mismo tratamiento, independientemente del tipo de objeto. Sí, hay cuatro tipos diferentes de objetos, y todos son realmente diferentes, y no se pueden usar de la misma manera, pero al mismo tiempo, incluso si su codificación puede ser diferente en el disco, conceptualmente todos funcionan exactamente lo mismo.

Pero la consistencia interna no es realmente una excusa para ser inflexible, y claramente sería muy flexible si pudiéramos corregir los errores después de que ocurran. Entonces ese no es un argumento realmente fuerte.

La verdadera razón por la que Git no te permite cambiar el mensaje de compromiso es muy simple: de esa manera, puedes confiar en los mensajes. Si permitía que las personas las cambiaran después, los mensajes son inherentemente poco confiables.

Para estar completo, podrías reescribir tu historial de confirmaciones local para reflejar lo que deseas, como lo sugirió sykora (con algunas rebase y restablecer --hard, jadear!)

Sin embargo, una vez que publique su historial revisado nuevamente (con un git push origin +master:master , el signo + que fuerza el impulso, incluso si no da como resultado un compromiso de "avance rápido" ... puede meterse en problemas

Extracto de esta otra pregunta SO:

De hecho, una vez empujé con --force a git.git repository y me regañó Linus BIG TIME. Creará muchos problemas para otras personas. Una respuesta simple es "no lo hagas".


En la actualidad, un reemplazo de git podría ser el truco.

En detalle: crea una rama de trabajo temporal

git checkout -b temp

Restablecer el compromiso para reemplazar

git reset --hard <sha1>

Enmiende el compromiso con el mensaje correcto

git commit --amend -m "<right message>"

Reemplace el antiguo compromiso con el nuevo

git replace <old commit sha1> <new commit sha1>

vuelve a la rama donde estabas

git checkout <branch>

quitar la rama de temperatura

git branch -D temp

empujar

guess

hecho.


En nuestra tienda, presenté la convención de agregar etiquetas anotadas reconocibles a confirmaciones con mensajes incorrectos y usar la anotación como reemplazo.

Aunque esto no ayuda a las personas que ejecutan comandos casuales de "registro de bitácoras", nos proporciona una forma de corregir las referencias incorrectas del rastreador de errores en los comentarios, y todas mis herramientas de compilación y publicación entienden la convención.

Obviamente, esta no es una respuesta genérica, pero podría ser algo que la gente pueda adoptar dentro de comunidades específicas. Estoy seguro de que si esto se utiliza en una escala mayor, puede surgir algún tipo de soporte de porcelana, eventualmente ...


Puede usar git rebase -i (contra la rama desde la que se ramificó) ''i'' para interactiva.

Reemplace la pick lado del comentario de compromiso que desea cambiar con r (o reword ), guarde y salga, y al hacerlo podrá realizar la edición.

git push una vez más y listo!


Supongamos que tienes un árbol como este:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]

Primero, checkout una rama temporal:

git checkout -b temp

En la bifurcación temp , reset --hard a commit que desea cambiar su mensaje (por ejemplo, esa confirmación es 946992 ):

git reset --hard 946992

Use la amend para cambiar el mensaje:

git commit --amend -m "<new_message>"

Después de eso, el árbol se verá así:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master] / b886a0 [temp]

A continuación, cherry-pick 946992 toda la confirmación que está por delante de 946992 desde el master hasta la temp y 946992 , use amend si también desea cambiar sus mensajes:

git cherry-pick 9143a9 git commit --amend -m "<new_message> ... git cherry-pick 5a6057 git commit --amend -m "<new_message>

El árbol ahora se ve así:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master] / b886a0 - 41ab2c - 6c2a3s - 7c88c9 [temp]

Ahora fuerce empujar la rama de temperatura a control remoto:

git push --force origin temp:master

El último paso es eliminar el master sucursal en local, el git fetch origin para extraer el master sucursal del servidor, luego cambiar al master sucursal y eliminar la temp sucursal.

Ahora tanto su local como remoto tendrán todos los mensajes actualizados.