remoto - git reset
Cómo deshacer la confirmación del último git commit sin perder los cambios (4)
¿Hay alguna manera de revertir un compromiso para que mi copia local guarde los cambios realizados en ese compromiso, pero se conviertan en cambios no confirmados en mi copia de trabajo? Deshacer un compromiso lo lleva al compromiso anterior: quiero mantener los cambios realizados pero los confirmé en la rama incorrecta.
Esto no ha sido empujado, solo cometido.
Hay muchas maneras de hacerlo, por ejemplo:
En caso de que no hayas empujado el compromiso públicamente todavía:
git reset HEAD~1 --soft
Eso es todo, sus cambios de confirmación estarán en su directorio de trabajo, mientras que la última confirmación se eliminará de su rama actual. Ver git reset man
En caso de que presionara públicamente (en una rama llamada ''maestro''):
git checkout -b MyCommit //save your commit in a separate branch just in case (so you don''t have to dig it from reflog in case you screw up :) )
revertir cometer normalmente y empujar
git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this intorduces a new coomit (say, it''s hash is 86b48ba) which removes changes, introduced in the coomit in question (but those changes are still visible in the history)
git push origin master
ahora si desea tener esos cambios como cambios locales en su copia de trabajo ("para que su copia local guarde los cambios realizados en esa confirmación"), simplemente revertir la confirmación de revertir con la opción -no-commit
:
git revert --no-commit 86b48ba (hash of the revert commit).
He creado un pequeño ejemplo: https://github.com/Isantipov/git-revert/commits/master
La mayoría de las veces ocurre cuando presiona los cambios en la rama incorrecta y luego me doy cuenta. Y siguiendo trabajos en la mayor parte del tiempo.
git revert commit-hash
git push
git checkout my-other-branch
git revert revert-commit-hash
git push
- revertir el commit
- (crear y) pagar otra rama
- revertir el revertir
Para el caso: "Esto no ha sido empujado, solo comprometido ". - Si usa IntelliJ (u otro IDE de JetBrains), puede hacerlo a continuación.
Vaya a la ventana Control de versiones ( Alt + 9 ) - pestaña "Registro". Haga clic derecho en un compromiso antes de su último. Restablecer la rama actual aquí -> elija Suave -> pulse Restablecer.
Hecho.
Esto "no confirmará" tus cambios (no los perderás) y te devolverá al punto anterior a tu último compromiso local.
Si presionó los cambios, puede undo
y mover los archivos a la etapa sin usar otra rama.
git show HEAD > patch
git revert HEAD
git apply patch
Se creará un archivo de parche que contiene los últimos cambios de rama. Luego revertir los cambios. Y finalmente, aplique los archivos de parche al árbol de trabajo.