¿Cuál es la forma más sencilla de deshacer una confirmación particular que es:
- no en la cabeza o CABEZA
- Ha sido empujado al control remoto.
Porque si no es el último commit,
git reset HEAD
no funciona Y porque ha sido empujado a un control remoto,
git rebase -i
y
git rebase --onto
causará algún problema en los controles remotos.
Más aún, no quiero modificar la historia realmente. Si había un código incorrecto, estaba allí en la historia y se puede ver. Solo lo quiero en la copia de trabajo, y no me importa una confirmación de fusión inversa.
En otras palabras, ¿cuál es el equivalente Git de los siguientes comandos svn:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
que elimina todos los cambios de 295 a 302 mediante la fusión inversa de todos los cambios en esas revisiones, como una nueva confirmación.
svn merge -c -302 ^/trunk
que deshace la confirmación 302, por supuesto, agregando otra confirmación que invierte combina los cambios de esa confirmación respectiva.
Pensé que debería ser una operación bastante simple en Git y un caso de uso bastante común. ¿Cuál es el objetivo de los compromisos atómicos?
Tenemos almacenamiento oculto y todo para garantizar que los commits sean perfectamente atómicos, ¿no debería poder deshacer uno o más de esos commits atómicos fácilmente?
fuente
No me gusta el autocomprometido que
git revert
sí, así que esto podría ser útil para algunos.Si solo desea que los archivos modificados no sean la confirmación automática , puede usar
--no-commit
que es lo mismo que el
-n
fuente
git reset HEAD~1 --soft
si ya revierte sin-n
git reset HEAD~n
no resolverá la eliminación de ninguna confirmación que no sea accesible continuamente desde la cabeza. La consulta es revertir cualquier confirmación particular.git revert --continue
que me indicó. Funcionó, pero lamentablemente comprometió los resultados. Tal vez necesitaba hacergit revert --no-commit --continue
.git revert
, si olvidó el-n
; porque en ese punto la última confirmación es la reversión, por lo que el restablecimiento parcial deshacerá esa confirmación pero no los cambios de código asociados de la reversiónDebido a que ya se ha presionado, no debes manipular directamente el historial.
git revert
revertirá cambios específicos de un commit usando un nuevo commit, para no manipular el historial de commit.fuente
Si el envío que desea revertir es un fusionaron comprometerse (ya se ha fusionado), entonces usted debe ya sea
-m 1
o-m 2
opción como se muestra a continuación. Esto le permitirá a git saber qué commit primario del commit combinado para usar. Más detalles se pueden encontrar AQUÍ .git revert <commit> -m 1
git revert <commit> -m 2
fuente