Pregunta ¿Cómo modificar las confirmaciones existentes sin flujo?


Escribí lo incorrecto en un mensaje de compromiso. Alternativamente, he olvidado incluir algunos archivos.

¿Cómo puedo cambiar los mensajes / archivos de confirmación? La confirmación no se ha enviado aún.


7680
2017-10-07 15:44


origen


Respuestas:


Enmendar el mensaje de confirmación más reciente

git commit --amend

abrirá su editor, lo que le permite cambiar el mensaje de confirmación de la confirmación más reciente. Además, puede establecer el mensaje de confirmación directamente en la línea de comando con:

git commit --amend -m "New commit message"

... sin embargo, esto puede hacer que los mensajes de compromiso de varias líneas o pequeñas correcciones sean más engorrosos de ingresar.

Asegúrese de no tener ningún cambio de copia de trabajo escenificado antes de hacer esto o se comprometerán también. (Sin escena los cambios no se comprometerán).

Cambiar el mensaje de una confirmación que ya ha enviado a su rama remota

Si ya has empujado tu confirmación a tu rama remota, entonces podrás necesita forzar empujar el compromiso con:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Advertencia: el forzar la fuerza sobrescribirá la rama remota con el estado de su servidor local.. Si hay confirmaciones en la sucursal remota que no tiene en su sucursal local, será perder esos compromisos.

Advertencia: tenga cuidado al modificar las confirmaciones que ya ha compartido con otras personas. La modificación compromete esencialmente reescribe ellos tienen diferente SHA ID, lo que plantea un problema si otras personas tienen copias de la confirmación anterior que ha reescrito. Cualquiera que tenga una copia de la confirmación anterior deberá sincronizar su trabajo con la confirmación recién reescrita, lo que a veces puede ser difícil, así que asegúrese de coordinarse con los demás cuando intente reescribir el historial de commit compartido, o simplemente evite reescribir las confirmaciones compartidas en total.


Use rebase interactivo

Otra opción es usar rebase interactivo.
Esto le permite editar cualquier mensaje que quiera actualizar, incluso si no es el último mensaje.

Para hacer una calabaza git, sigue estos pasos:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Una vez que aplaque sus compromisos, elija el e/r para editar el mensaje

enter image description here

Nota importante sobre la rebase interactiva

Cuando usas el git rebase -i HEAD~X puede haber Más que X comete Git "recopilará" todos los commits en el último X commits y si hubo una fusión en algún punto entre ese rango, verá todos los commits así que el resultado será X +.

Buen consejo:

Si tiene que hacerlo para más de una rama y puede enfrentar conflictos al modificar el contenido, configure git rerere y deja que git resuelva esos conflictos automáticamente por ti.


Documentación


14790
2018-02-08 04:26



git commit --amend -m "your new message"

2414
2017-10-07 19:52



Si la confirmación que desea corregir no es la más reciente:

  1. git rebase --interactive $parent_of_flawed_commit

    Si desea corregir varios commits defectuosos, pase el padre del más antiguo de ellos.

  2. Aparecerá un editor, con una lista de todas las confirmaciones desde la que diste.

    1. Cambio pick a reword (o en versiones antiguas de Git, a edit) frente a cualquier commit que desee corregir.
    2. Una vez que guardes, Git reproducirá los commits listados.
       

  3. Para cada compromiso que quieras expresar en otras palabras, Git te devolverá a tu editor. Para cada compromiso que quieras editar, Git te deja caer en el caparazón. Si estás en el caparazón:

    1. Cambie la confirmación de cualquier forma que desee.
    2. git commit --amend
    3. git rebase --continue

La mayoría de esta secuencia se explicará a través de la salida de los diversos comandos sobre la marcha. Es muy fácil, no necesitas memorizarlo, solo recuerda que git rebase --interactive te permite corregir confirmaciones sin importar cuánto tiempo hayan pasado.


Tenga en cuenta que no querrá cambiar las confirmaciones que ya haya enviado. O tal vez lo haga, pero en ese caso tendrá que tener mucho cuidado para comunicarse con todos los que puedan haber hecho sus commits y haber hecho un trabajo encima de ellos. ¿Cómo recupero / vuelvo a sincronizar después de que alguien empuja una rebase o un reinicio a una rama publicada?


2294
2017-08-15 21:20



Para modificar la confirmación anterior, realice los cambios que desee y realice esos cambios, y luego ejecútelos

git commit --amend

Esto abrirá un archivo en su editor de texto que representa su nuevo mensaje de confirmación. Comienza lleno con el texto de su mensaje de confirmación anterior. Cambie el mensaje de confirmación como desee, luego guarde el archivo y salga de su editor para finalizar.

Para modificar la confirmación anterior y mantener el mismo mensaje de registro, ejecute

git commit --amend -C HEAD

Para corregir la confirmación anterior quitándola por completo, ejecuta

git reset --hard HEAD^

Si desea editar más de un mensaje de confirmación, ejecute

git rebase -i HEAD~commit_count

(Reemplazar commit_count con el número de confirmaciones que desea editar). Este comando inicia su editor. Marque la primera confirmación (la que desea cambiar) como "editar" en lugar de "seleccionar", luego guarde y salga de su editor. Haga el cambio que desea confirmar y luego ejecute

git commit --amend
git rebase --continue

Nota: También puede "Hacer el cambio que desee" desde el editor abierto por git commit --amend


749
2018-06-06 21:16



Como ya fue mencionado, git commit --amend es la forma de sobrescribir el último compromiso. Una nota: si le gustaría también sobrescribir los archivos, el comando sería

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



También puedes usar git filter-branch para eso.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

No es tan fácil como un trivial git commit --amend, pero es especialmente útil, si ya tiene algunas fusiones después de su mensaje de compromiso erróneo.

Tenga en cuenta que esto intentará reescribir CADA commit entre HEAD y el compromiso defectuoso, por lo que debe elegir su msg-filter comando muy sabio ;-)


346
2018-01-10 14:23



Prefiero de esta manera.

git commit --amend -c <commit ID>

De lo contrario, habrá una nueva confirmación con una nueva ID de confirmación


306
2017-11-08 03:51



Si está utilizando la herramienta GUI de Git, hay un botón llamado modificar la última confirmación. Haga clic en ese botón y luego mostrará sus últimos archivos y mensajes de confirmación. Simplemente edite ese mensaje y puede confirmarlo con un nuevo mensaje de confirmación.

O use este comando desde una consola / terminal:

git commit -a --amend -m "My new commit message"

304
2018-01-22 17:23



Puedes usar Git rebase. Por ejemplo, si desea modificar de nuevo para confirmar bbc643cd, ejecute

$ git rebase bbc643cd^ --interactive

En el editor predeterminado, modifique 'elegir' para 'editar' en la línea cuyo compromiso desea modificar. Haga sus cambios y luego póngalos en escena con

$ git add <filepattern>

Ahora puedes usar

$ git commit --amend

para modificar la confirmación, y después de eso

$ git rebase --continue

para volver al compromiso de la cabeza anterior.


279
2017-10-22 11:22



  1. Si solo desea modificar su último mensaje de confirmación, haga lo siguiente:

    git commit --amend
    

    Eso lo llevará a su exitor de texto y le permitirá cambiar el último mensaje de confirmación.

  2. Si desea cambiar los últimos 3 mensajes de confirmación, o cualquiera de los mensajes de confirmación hasta ese momento, suministre HEAD~3 al git rebase -i mando:

    git rebase -i HEAD~3
    

270
2017-11-15 09:29



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

Git creará un directorio temporal para reescribir y respaldará 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á de que todo ramas y etiquetas son reescritos

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 maestro y acceder a él en una sucursal old_master:

git checkout -b old_master refs/original/refs/heads/master

251
2018-03-27 20:43