¿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
pick
areword
.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 --force
Luego debe ejecutar como se sugiere en la respuesta de @ Mureinik.Premisa:
si tu git-graph se parece a ...
(
df9c192
yb7ec061
son los hashes commit de target-commit y parent-commit, por separado)Solución:
solo puede escribir las siguientes instrucciones ...
Explicación:
git reset --soft b7ec061
mantendrá sus cambios de archivos y se restablecerá a parent-commit (es decir, b7ec061)git commit -m "..."
creará localmente una nueva confirmacióngit push -f
empujará 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 (usandoamend
tambié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: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 --force
o<how you push normally> --force
. La clave aquí es--force
.Segundo método:
Puede ver el hash de confirmación
git log
o extraer de la url del repositorio, el ejemplo en mi caso es881129d771219cfa29e6f6c2205851a2994a8835
Entonces puedes hacer
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
ogit rebase -i HEAD^
(si es lo último)Tu verias:
noop
entonces probablemente esté escribiendo mal, por ejemplo, si al final legit rebase -i 881129d771219cfa29e6f6c2205851a2994a88
falta^
, es mejor que salga del editor sin guardar y descubra la razón:noop
problema, simplemente cambie la palabrapick
areword
, solo queda otra (no edita el mensaje de confirmación en este momento), por ejemplo:git push -u origin master --force
o<how you push normally> --force
. La clave aquí es--force
.Para obtener más información, lea el documento .
fuente