Cometí un error y no sé cómo eliminar mi último empuje en el repositorio. Extraigo las últimas actualizaciones de la aplicación, pero tiene conflictos y las envío al repositorio.
¿Cómo borrar mi última confirmación? O como arreglarlo.
fuente
Cometí un error y no sé cómo eliminar mi último empuje en el repositorio. Extraigo las últimas actualizaciones de la aplicación, pero tiene conflictos y las envío al repositorio.
¿Cómo borrar mi última confirmación? O como arreglarlo.
En primer lugar, si está trabajando con otras personas en el mismo repositorio de código, no debe eliminar una confirmación, ya que cuando fuerza la actualización en el repositorio, dejará los repositorios locales de sus compañeros de trabajo en un estado ilegal (por ejemplo, si hizo confirmaciones después de la que eliminó, esas confirmaciones no serán válidas ya que se basaron en una confirmación ahora inexistente).
Dicho esto, lo que puedes hacer es revertir el compromiso. Este procedimiento se realiza de manera diferente (diferentes comandos) según el CVS que esté utilizando:
En git :
git revert <commit>
Sobre mercurial :
hg backout <REV>
EDITAR: La operación de reversión crea una nueva confirmación que hace lo contrario que la confirmación revertida (por ejemplo, si la confirmación original agregó una línea, la confirmación de reversión elimina esa línea), eliminando efectivamente los cambios de la confirmación no deseada sin reescribir el historial del repositorio.
git backout <REV>
? O:hg backout <REV>
?Si está no trabajar con otros (o está feliz de hacer que la molestia significativa) , entonces es posible eliminar confirmaciones de las ramas Bitbucket.
Si está intentando cambiar una rama no maestra:
si está intentando cambiar la rama maestra
En git generalmente, la rama maestra no es especial, es solo una convención. Sin embargo, bitbucket y github y sitios similares generalmente requieren que haya una rama principal (presumiblemente porque es más fácil que escribir más código para manejar el evento de que un repositorio no tiene ramas, no estoy seguro). Por lo tanto, debe crear una nueva rama y convertirla en la rama principal:
En Bitbucket, vaya a la configuración del repositorio y cambie la "Rama principal" a
master_temp
(en Github, cambie la "Rama predeterminada").Ahora vaya a Bitbucket y debería ver el historial que desea. Ahora puede ir a la página de configuración y volver a cambiar la rama principal
master
.Este proceso también funcionará con cualquier otro cambio de historial (p
git filter-branch
. Ej .). Solo debe asegurarse de restablecer las confirmaciones adecuadas, antes de que el nuevo historial se separe del anterior.editar : aparentemente, no necesita ir a todo este lío en github, ya que puede forzar una rama de reinicio .
Tratar con colaboradores molestos
La próxima vez que alguien intente extraer de su repositorio (si ya ha obtenido la confirmación incorrecta), la extracción fallará. Tendrán que restablecer manualmente a una confirmación antes del historial cambiado y luego volver a tirar.
Si han sacado el compromiso incorrecto y se han comprometido sobre él , entonces tendrán que reiniciar, y luego
git cherry-pick
los compromisos buenos que quieren crear, recreando efectivamente toda la rama sin el compromiso incorrecto.Si nunca realizaron la mala confirmación, entonces todo este proceso no los afectará y podrán hacerlo con normalidad.
fuente
puede restablecerlo para
HEAD^
luego forzarlo.Eliminará su última confirmación y se reflejará en bitbucket como confirmación eliminada, pero permanecerá en su servidor.
fuente
He tenido problemas con git revert en el pasado (principalmente porque no estoy muy seguro de cómo funciona). He tenido problemas para revertir debido a problemas de fusión.
Mi solución simple es esta.
Paso 1.
su proyecto en otra carpeta, luego:
Paso 2.
luego paso 3.
en su último (y principal) directorio de proyecto (el que tiene la última confirmación problemática) pegue los archivos del paso 2
Paso 4.
Paso 5.
Disfrutar
fuente
git revert
es simple: crea una nueva confirmación que hace lo contrario de los cambios en una confirmación anterior (o varias confirmaciones). No elimina confirmaciones, por lo que no es relevante para esta pregunta. Además, el paso de clonación aquí no es realmente necesario.A continuación, se muestra un enfoque simple en hasta 4 pasos:
0 - Avisa al equipo que vas a arreglar el repositorio
Conéctese con el equipo y hágales saber los próximos cambios.
1 - Eliminar la última confirmación
Suponiendo que su rama objetivo es
master
:En este punto, ha terminado si trabaja solo.
2 - Arregle los repositorios locales de su compañero de equipo
En el de tu compañero de equipo:
Si su compañero de equipo no tuvo nuevas confirmaciones, ya ha terminado y debería estar sincronizado.
3 - Recuperación de confirmaciones perdidas
Digamos que un compañero de equipo tenía un compromiso nuevo y no publicado que se perdió en este proceso.
Haga esto para tantas confirmaciones como sea necesario.
He utilizado con éxito este enfoque muchas veces. Requiere un esfuerzo de equipo para asegurarse de que todo esté sincronizado.
fuente
Como han dicho otros, normalmente desea utilizar
hg backout
ogit revert
. Sin embargo, a veces realmente desea deshacerse de una confirmación.Primero, querrá ir a la configuración de su repositorio. Haga clic en el
Strip commits
enlace.Ingrese el ID del conjunto de cambios para el conjunto de cambios que desea destruir y haga clic en
Preview strip
. Eso le permitirá ver qué tipo de daño está a punto de hacer antes de hacerlo. Luego, simplemente haga clicConfirm
y su confirmación ya no será un historial. Asegúrese de decirles a todos sus colaboradores lo que ha hecho, para que no rechacen accidentalmente el compromiso ofensivo.fuente
Una vez que se hayan confirmado los cambios, no se podrán eliminar. porque la naturaleza básica de commit es no borrar.
Lo que puede hacer (método fácil y seguro),
Rebase interactiva:
1)
git rebase -i HEAD~2
# mostrará tus 2 confirmaciones recientes2) Su confirmación aparecerá como, Reciente aparecerá en la parte inferior de la página LILO (último en Último en salir)
Eliminar la última fila de confirmación por completo
3) guárdalo por
ctrl+X
oESC:wq
ahora tu rama se actualizará sin tu última confirmación.
fuente
Puede escribir el comando también para Bitbucket como lo menciona Dustin :
Para eliminar la última confirmación localmente en git use:
fuente
Por ahora, la nube bitbucket (no estoy seguro de qué versión) permite revertir una confirmación del sistema de archivos de la siguiente manera (no veo cómo revertir desde la interfaz de Bitbucket en el navegador Chrome).
-Haga una copia de seguridad de todo su directorio para proteger los cambios que cometió inadvertidamente
-seleccionar directorio extraído
-botón derecho del ratón: menú de tortuga git
-repo-browser (la opción de menú 'revertir' solo deshace los cambios no confirmados)
-presiona el botón HEAD
-selecciona la línea superior (la última confirmación)
-botón derecho del mouse: revertir el cambio mediante esta confirmación
-después de deshacer los cambios en el sistema de archivos, presione confirmar
-esto actualiza GIT con un mensaje 'Revertir (su mensaje anterior). Esto revierte el compromiso de fulano de tal '
-seleccione 'confirmar y empujar'.
fuente