Sourcetree - deshacer confirmaciones no aceleradas


208

Estoy usando Sourcetree para Windows para un repositorio de git y me gustaría deshacer un commit no apresurado.

¿Es eso posible? Si hago "revertir confirmación", crea una segunda confirmación que revierte la primera confirmación, pero no quiero que la primera confirmación aparezca en absoluto en mi control de código fuente.

También podría eliminar mi repositorio local y volver a extraerlo sin mi confirmación local, pero ¿tal vez hay otra forma?


He escrito un artículo detallado con capturas de pantalla. Compartiendo con la esperanza de que ayudaría: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

Respuestas:


345
  1. Haga clic derecho en la confirmación a la que desea restablecer (¡no en la que desea eliminar!)
  2. Seleccione "Restablecer maestro a esta confirmación"
  3. Seleccione "Soft" reset.

Un restablecimiento parcial mantendrá sus cambios locales.

Fuente: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Editar

Acerca de git revert: este comando crea una nueva confirmación que deshacerá otras confirmaciones. Por ejemplo, si tiene una confirmación que agrega un nuevo archivo, git revertpodría usarse para realizar una confirmación que eliminará el nuevo archivo.

Acerca de aplicar un restablecimiento parcial: suponga que tiene los commits Apara E( A---B---C---D---E) y desea eliminar el último commit ( E). Entonces puede hacer un restablecimiento parcial para confirmar D. Con un reinicio suave, el commit Ese eliminará de git pero los cambios locales se mantendrán. Hay más ejemplos en la documentación de git reset .


34
O si está trabajando en una rama - "Restablezca la rama actual a este commit"
Tom Auger

55
No entiendo estas explicaciones de la interfaz de usuario ... Restablecer la rama actual a esta confirmación, no parece que elimine la confirmación. Y terminó haciendo lo que esperarías más. Restableció mi copia de trabajo a la confirmación, en lugar de eliminarla.
MrFox

Estoy de acuerdo con @MrFox. Después de hacer esto, el commit que no quiero todavía se muestra en el árbol.
Timmmm

@Timmmm: ¿Ayuda la nueva explicación?
nightlyop

En realidad, me di cuenta de que ya había presionado mi compromiso con Github. Encontré un artículo que explica cómo "reescribir la historia", pero parece que es más problema de lo que vale.
Timmmm

46

Si selecciona la entrada de registro a la que desea volver, puede hacer clic en "Restablecer esta confirmación". Solo use esta opción si no presionó los cambios de confirmación inversa. Si le preocupa perder los cambios, puede usar el modo suave que dejará un conjunto de cambios no confirmados (lo que acaba de cambiar). El uso de la combinación restablece la copia de trabajo pero mantiene esos cambios, y un disco duro simplemente eliminará los cambios por completo. Aquí hay algunas capturas de pantalla:

ingrese la descripción de la imagen aquí


3
Si aún ve un icono que muestra un Push está disponible desde su confirmación anterior (que acaba de eliminar), tire y Sourcetree parece actualizar la IU.
ChristoKiwi

6

Si desea eliminar una confirmación, puede hacerlo como parte de un rebase interactivo. Pero hazlo con precaución, para que no termines arruinando tu repositorio.

En Sourcetree:

  1. Haga clic con el botón derecho en una confirmación anterior a la que desea eliminar y elija " Rebase children of xxxx de forma interactiva ... ". El que haga clic será su "base" y podrá realizar cambios en cada confirmación realizada después de esa.
  2. En la nueva ventana, seleccione la confirmación que desea eliminar y presione el botón " Eliminar " en la parte inferior, o haga clic derecho en la confirmación y haga clic en " Eliminar confirmación ".
  3. Haga clic en " Aceptar " (o " Cancelar " si desea abortar).

Consulte esta publicación de blog de Atlassian para obtener más información sobre rebases interactivos en Sourcetree.


Esta es la respuesta que estaba buscando, funcionó exactamente como se necesitaba.
Cliff Burton

0

Si está en otra rama, primero necesita "verificar esta confirmación" para confirmar que desea eliminar, y solo luego "restablecer la rama actual a esta confirmación" eligiendo la confirmación previa de Wright, funcionará.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.