¿Hay alguna manera de editar un mensaje de confirmación después de comprometerse y presionar a GitHub? Veo que hay un 'agregar una nota', así como comentarios en línea, pero no hay edición real de un mensaje de confirmación. También hay 'enmendar confirmación' en las extensiones de git, pero eso no edita el mensaje existente.
129

Respuestas:
git rebase -i <commit hash you want to change>^Esto abrirá su editor predeterminado (generalmente vi ) con una lista de confirmaciones y acciones para cada una. Por defecto, la acción es
pick.Para cualquier confirmación que desee cambiar el mensaje, cambie
pickareword.Guardar y salir (en vi:)
:wq.Para cada confirmación, obtendrá un editor para editar el mensaje de confirmación. Cámbielo como mejor le parezca, guarde y salga.
Una vez que haya terminado de editar todos los mensajes de confirmación, volverá al símbolo del sistema y tendrá un nuevo árbol con los mensajes actualizados.
Ahora puedes subirlos a github usando
git push origin --force.Si solo necesita arreglar su último commit, puede reemplazar los pasos 1-4 con
git commit --amend.fuente
^allí; de hecho, le sugerí que se cambie el nombre del padre de la confirmación que desea cambiar.^^para finalizar el comando con un literal,^por ejemplo:git rebase -i 2c747b32^^En Intellij Idea puedes hacerlo tan fácil.
fuente
git push origin --forceLuego debe ejecutar como se sugiere en la respuesta de @ Mureinik.Premisa:
si tu git-graph se parece a ...
(
df9c192yb7ec061son los hashes commit de target-commit y parent-commit, por separado)Solución:
solo puede escribir las siguientes instrucciones ...
Explicación:
git reset --soft b7ec061mantendrá sus cambios de archivos y se restablecerá a parent-commit (es decir, b7ec061)git commit -m "..."creará localmente una nueva confirmacióngit push -fempujará su nueva confirmación al servidor y reemplazará la anterior (es decir, df9c192)fuente
Otra opción es crear una "confirmación de erratas" adicional (y push) que haga referencia al objeto de confirmación que contiene el error; la nueva confirmación de erratas también proporciona la corrección. Una confirmación de errata es una confirmación sin cambios sustanciales de código pero con un mensaje de confirmación importante; por ejemplo, agregue un carácter de espacio a su archivo readme y confirme ese cambio con el mensaje de confirmación importante, o use la opción git
--allow-empty. Ciertamente es más fácil y seguro que el rebase, no modifica el historial verdadero y mantiene limpio el árbol de la rama (usandoamendtambién es una buena opción si está corrigiendo la confirmación más reciente, pero una confirmación de erratas puede ser una buena opción para las confirmaciones anteriores). Este tipo de cosas rara vez sucede que simplemente documentar el error es lo suficientemente bueno. En el futuro, si necesita buscar en un registro git una palabra clave de función, la confirmación original (errónea) puede no aparecer porque se utilizó la palabra clave incorrecta en esa confirmación original (el error tipográfico original); sin embargo, la palabra clave aparecerá en la confirmación de erratas que luego te indicará la confirmación original que tenía el error tipográfico. Aquí hay un ejemplo:$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Autor: Primero Último Fecha: miércoles 8 de agosto 15:55:52 2018 -0600 Errata cometer: Este commit no tiene un cambio sustancial de código. Esta confirmación se proporciona solo para documentar una corrección a un mensaje de confirmación anterior. Esto corresponde al objeto de confirmación e083a7abd8deb5776cb304fa13731a4182a24be1 Mensaje de confirmación incorrecto original: Se cambió el color de fondo a rojo. Corrección (* cambio resaltado *): Se cambió el color de fondo a * azul * commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Autor: Primero Último Fecha: miércoles 8 de agosto 15:43:16 2018 -0600 Algún mensaje de confirmación provisional commit e083a7abd8deb5776cb304fa13731a4182a24be1 Autor: Primero Último Fecha: miércoles 8 de agosto 13:31:32 2018 -0600 Se cambió el color de fondo a rojo.fuente
La respuesta de @Mureinik es buena pero no comprensible para los novatos.
Primer método:
git commit --amend, verá:pick, esta ya es la página de edición y puede editar directamente el mensaje superior y guardar y salir , por ejemplo:git push -u origin master --forceo<how you push normally> --force. La clave aquí es--force.Segundo método:
Puede ver el hash de confirmación
git logo extraer de la url del repositorio, el ejemplo en mi caso es881129d771219cfa29e6f6c2205851a2994a8835Entonces puedes hacer
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835ogit rebase -i HEAD^(si es lo último)Tu verias:
noopentonces probablemente esté escribiendo mal, por ejemplo, si al final legit rebase -i 881129d771219cfa29e6f6c2205851a2994a88falta^, es mejor que salga del editor sin guardar y descubra la razón:noopproblema, simplemente cambie la palabrapickareword, solo queda otra (no edita el mensaje de confirmación en este momento), por ejemplo:git push -u origin master --forceo<how you push normally> --force. La clave aquí es--force.Para obtener más información, lea el documento .
fuente