repositorio - git push tag
Intento empujado accidentalmente: cambiar el mensaje de confirmaciĆ³n de git (4)
En lugar de ir a toda la ruta de rebase para una confirmación:
git reset --soft head~
git commit -m "The message you wanted to use"
git push -f
Puedes ver las opciones en la página de git-reset .
Para un proyecto en el que solo está trabajando, el historial modificado no debería ser un problema.
En mi repositorio local, tengo una confirmación con un mensaje de confirmación incorrecto.
Ya publiqué el mensaje de confirmación incorrecto con git push
.
Ahora el repositorio remoto (que está alojado en GitHub) también tiene el mensaje de confirmación incorrecto.
Ya he probado git commit --amend
, pero descubrí que no funcionaría para mí en esta situación porque hice commits adicionales desde el incorrecto.
¿Cómo arreglarías esta situación?
La solución más fácil ( pero lea esta respuesta completa antes de hacer esto ):
-
git rebase -i <hash-of-commit-preceding-the-incorrect-one>
- En el editor que se abre, cambie
pick
toreword
en la línea para la confirmación incorrecta. - Guarde el archivo y cierre el editor.
- El editor se abrirá nuevamente con el mensaje de confirmación incorrecto. Arreglalo.
- Guarde el archivo y cierre el editor.
-
git push --force
para actualizar GitHub.
Esto significará que publicará una versión modificada de un repositorio publicado previamente. Si alguien sacó o sacó de su repositorio desde cuando cometió el error con el mensaje de confirmación incorrecto, y cuando lo arregló, entonces experimentarán algunas dificultades más adelante. Así que asegúrese de poder aceptar esta consecuencia antes de intentar esto.
Si no has insertado el código en la rama remota (Github / Bitbucket), puedes cambiar el mensaje de confirmación en la línea de comando como se muestra a continuación.
git commit --amend -m "Your new message"
Si estás trabajando en una rama específica haz esto.
git commit --amend -m "BRANCH-NAME: new message"
Si ya ha insertado el código con un mensaje incorrecto, debe tener cuidado al cambiar el mensaje. es decir, después de cambiar el mensaje de compromiso y tratar de volver a presionarlo, termina teniendo problemas. Para hacerlo sin problemas, siga estos pasos. Por favor, lea la respuesta completa antes de hacerlo
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
Nota importante: cuando usa la fuerza directamente puede terminar con problemas de código que otros desarrolladores están trabajando en la misma rama. Entonces, para evitar esos conflictos, debe extraer el código de su rama antes de hacer el empuje de la fuerza.
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
Esta es la mejor práctica al cambiar el mensaje de confirmación, si ya se envió.
Si tiene que cambiar un mensaje de confirmación anterior en varias ramas (es decir, la confirmación con el mensaje erróneo está presente en varias ramas), es posible que desee utilizar
git filter-branch -f --msg-filter ''sed "s/<old message>/<new message>/g"'' -- --all
para reemplazar el mensaje de compromiso.
Git creará un directorio temporal para la reescritura y, además, hará una copia de seguridad de las referencias antiguas en refs / original /.
-f
hará cumplir la ejecución de la operación. Esto es necesario si el directorio temporal ya está presente o si ya hay referencias almacenadas en refs / original . Si ese no es el caso, puede soltar esta bandera.
--
separa las opciones de la rama de filtro de las opciones de revisión
--all
se asegurarán de que todas las ramas y etiquetas se reescriban.
Debido a la copia de seguridad de sus referencias anteriores, puede volver fácilmente al estado antes de ejecutar el comando.
Digamos que quieres recuperar tu master y acceder a él en la rama old_master:
git checkout -b old_master refs/original/refs/heads/master
Una vez que esté satisfecho con sus cambios, use git push -f para enviar los cambios a su repositorio público.
Tenga en cuenta que debe informar esto a sus colaboradores, ya que se han modificado todos los algoritmos hash de las confirmaciones que comienzan con el primero modificado.