Edite un mensaje de confirmación en SourceTree Windows (ya empujado a remoto)

203

¿Cómo edito un mensaje de confirmación incorrecto en SourceTree sin tocar la línea de comando?

Detalles adicionales:

  • Este no es el último commit.
  • Todo ya fue empujado a Bitbucket.
  • Este es un repositorio privado y yo soy el único colaborador.
  • No me importa perder ninguna de las confirmaciones anteriores, ya que puedo volver a comprometerlas en cualquier momento.
  • Sin embargo, no quiero perder ninguna modificación de código realizada.

Salir:

  • Como parece imposible en este momento según sus comentarios y respuestas, voy a crear un nuevo repositorio y comenzar de nuevo. ¡Gracias a todos por su ayuda!
Comunidad
fuente

Respuestas:

427

Estos son los pasos para editar el mensaje de confirmación de una confirmación anterior ( que no es la confirmación más reciente ) utilizando SourceTree para Windows versión 1.5.2.0 :

Paso 1

Seleccione la confirmación inmediatamente antes de la confirmación que desea editar. Por ejemplo, si quiero editar el commit con el mensaje "FOOBAR!" entonces necesito seleccionar el commit que viene justo antes:

Seleccionando commit antes del que quiero editar.

Paso 2

Haga clic derecho en la confirmación seleccionada y haga clic en Rebase children...interactively:

Seleccionando "Rebase niños interactivamente".

Paso 3

Seleccione la confirmación que desea editar, luego haga clic Edit Messageen la parte inferior. En este caso, selecciono el commit con el mensaje "FOOBAR!":

Seleccione la confirmación que desea editar.

Paso 4

Edite el mensaje de confirmación y luego haga clic OK. En mi ejemplo, he agregado "SHAZBOT! SKADOOSH!"

Edite el mensaje de confirmación

Paso 5

Cuando regrese a la ventana interactiva de rebase, haga clic en OKpara finalizar la rebase:

Haga clic en Aceptar para finalizar.

Paso 6

En este punto, necesitará forzar sus nuevos cambios ya que ha modificado las confirmaciones que ya ha presionado. Sin embargo, la versión 1.5.2.0 actual de SourceTree para Windows no le permite forzar a través de la GUI, por lo que deberá usar Git desde la línea de comandos de todos modos para hacerlo.

Haga clic Terminalen la GUI para abrir una terminal.

Haga clic en terminal

Paso 7

Desde el terminal forzar-empujar con el siguiente comando,

git push origin <branch> -f

donde <branch>está el nombre de la rama que desea empujar, y -fsignifica forzar el empuje. El impulso forzado sobrescribirá sus confirmaciones en su repositorio remoto, pero eso está bien en su caso ya que dijo que no está compartiendo su repositorio con otras personas.

¡Eso es! Ya terminaste!


fuente
44
Los pasos son básicamente los mismos en la versión para Mac, también.
race_carr
3
Cuidado: si desea comenzar su mensaje de confirmación con # esto no funcionará, git lo trata como un comentario y le dice que su mensaje de confirmación está vacío.
Daniel Edholm Ignat
1
"¡Eso es! ¡Ya terminaste!" - Es tan fácil como no sé qué, ya que puede ser una trampa para un conejo. En lugar de crear una función de programa, para una situación tan importante y frecuente. Cuando acaba de hacer un error tipográfico a toda prisa, debe restablecer la cabeza y crear una nueva confirmación nuevamente.
Rantiev
67
Divertido: me pregunto por qué no hacen una simple opción "Editar mensaje de confirmación".
Jonathan Aquino
1
Force Push ahora está disponible a través de la GUI. De lo contrario PERFECTO :-)
LaTisha
43

En la versión 1.9.6.1. Para la confirmación sin empujar.

  1. Haga clic en la descripción previamente confirmada
  2. Haga clic en el icono Confirmar
  3. Ingrese un nuevo mensaje de confirmación y elija " Última confirmación de Ammend " en el menú desplegable Opciones de .
  4. Compromete tu mensaje.
Franco
fuente
13

Si el mensaje de comentario incluye no inglés , utilizando el método proporcionado por user456814, esos caracteres serán reemplazados por signos de interrogación. (probado bajo sourcetree Ver2.5.5.0)

Entonces tengo que usar el siguiente método.

PRECAUCIÓN : si el compromiso ha sido extraído por otros miembros, los cambios a continuación pueden causarles caos.

Paso 1 : en la ventana principal de sourcetree, localice su pestaña de repositorio y haga clic en el botón " terminal " para abrir la consola de comandos de git.

Paso2 :

[Situación A] : el compromiso de destino es el último.

1) En la consola de comando git, ingrese

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

2) Si la confirmación del objetivo ha sido empujada al control remoto, debe presionar nuevamente por la fuerza. En la consola de comando git, ingrese

git push --force

[Situación B] : el compromiso de destino no es el último.

1) En la consola de comando git, ingrese

git rebase -i HEAD~n

Es aplastar los últimos n commits. por ejemplo, si desea editar el mensaje antes del último, n es 2. Este comando abrirá una ventana vi, la primera palabra de cada línea es " pick " y cambia el "pick" a " reword " para la línea quieres editar Luego, ingrese :wqpara guardar y salir de esa ventana vi. Ahora, se abrirá una nueva ventana vi, en esta ventana ingresará su nuevo mensaje. Utilice también :wqpara guardar y salir.

2) Si la confirmación del objetivo ha sido empujada al control remoto, debe presionar nuevamente por la fuerza. En la consola de comando git, ingrese

git push --force


Finalmente : en la ventana principal de sourcetree, presione F5para actualizar.

Hosi Golden
fuente
12

Actualizar

Nota: esta respuesta se escribió originalmente con respecto a las versiones anteriores de SourceTree para Windows, y ahora está desactualizada.

Vea mi nueva respuesta para la versión actual de SourceTree para Windows, 1.5.2.0 . Dejo esta respuesta para propósitos históricos.

Respuesta original

como estoy en Windows, no tengo una herramienta de línea de comandos ni sé cómo usarla :( ¿Es la única forma de solucionarlo? ¿La GUI no cubre todas las funciones de git? - Cartel original

Con respecto a las GUI de Git, no, no cubren todas las funciones de Git . Ni siquiera se acercan . Le sugiero que consulte una de las respuestas en ¿Cómo edito un mensaje de confirmación incorrecto en Git?, Git es lo suficientemente flexible como para que haya múltiples soluciones ... desde la línea de comandos.

SourceTree podría venir con el shell msysgit bash ya, o podría usar el shell de comandos estándar de Windows. De cualquier manera, lo abre desde SourceTree haciendo clic en el botón Terminal:

ingrese la descripción de la imagen aquí

Usted establece qué terminal usa SourceTree (bash o Windows) aquí:

ingrese la descripción de la imagen aquí

Una forma de resolver el problema en SourceTree

Dicho esto, aquí hay una manera de hacerlo en SourceTree. Como mencionó en los comentarios que no le importa "volver a la confirmación defectuosa" (con lo cual supongo que realmente quiere decir reiniciar, que es una operación diferente en Git), estos son los pasos:

  1. Haga un restablecimiento completo en SourceTree a la mala confirmación haciendo clic derecho sobre él y seleccionando Reset current branch to this commit, y seleccionando la opción de restablecimiento completo desde el menú desplegable.ingrese la descripción de la imagen aquí
  2. Haga clic en el botón Confirmar, luego
  3. Haga clic en la casilla de verificación en la parte inferior que dice "Modificar la última confirmación". ingrese la descripción de la imagen aquí
  4. Realice los cambios que desea en el mensaje, luego haga clic en Confirmar nuevamente. Voila!

Con respecto a este comentario :

Si no es posible porque ya está en Bitbucket, no me importaría crear un nuevo repositorio y comenzar de nuevo.

¿Esto significa que eres la única persona que trabaja en el repositorio? Esto es importante porque no es trivial cambiar el historial de un repositorio (como enmendar un commit) sin causar problemas a sus colaboradores. Sin embargo, suponiendo que usted sea la única persona que trabaja en el repositorio, lo siguiente que querrá hacer es forzar el cambio de su historial al control remoto.

Tenga en cuenta, sin embargo, que debido a que realizó un restablecimiento completo de la confirmación defectuosa, luego de forzar el empuje hace que pierda todo el trabajo que vino después. Si está bien, entonces es posible que necesite usar el siguiente comando en la línea de comando para hacer el empuje forzado, porque no pude encontrar una opción para hacerlo en SourceTree:

git push remote-repo head -f

Esto también supone que BitBucket le permitirá forzar el empuje a un repositorio.

De todos modos, realmente debería aprender a usar Git desde la línea de comandos, lo que lo hará más competente en Git. #ProTip, use msysgit y active el modo Edición rápida en las propiedades del terminal, para que pueda hacer doble clic para resaltar una línea de texto, haga clic con el botón derecho para copiar y haga clic con el botón derecho nuevamente para pegar. Es muy rapido.

Comunidad
fuente