tag - git revert
¿Cómo se puede deshacer el último git add? (8)
Dependiendo del tamaño y la escala de la dificultad, puede crear una rama de cero (temporal) y comprometer el trabajo actual allí.
Luego, cambie a la rama original y finalice la compra, y elija los archivos apropiados desde la confirmación de reutilización.
Al menos, tendría un registro permanente de los estados actuales y anteriores desde los que trabajar (hasta que elimine esa rama de cero).
¿Es posible cambiar el último cambio escenificado (no comprometido) en git ? Supongamos que hay muchos archivos en la rama actual, algunos en etapas, otros no. En algún momento, algún tonto programador ejecutó accidentalmente:
git add -- .
...en lugar de:
git checkout -- .
¿Puede este programador ahora desestabilizar sus últimos cambios con algún comando mágico de git ? ¿O debería haberse comprometido antes de experimentar en primer lugar?
En la fecha, git solicita:
-
use "git rm --cached <file>..." to unstage
si los archivos no estaban en el repositorio. Desplaza los archivos manteniéndolos allí. -
use "git reset HEAD <file>..." to unstage
si los archivos estaban en el repositorio y los está agregando como modificados. Mantiene los archivos tal como están y los desestabiliza.
Según tengo entendido, no puedes deshacer el git add --
pero puedes eliminar una lista de archivos como se mencionó anteriormente.
Entonces la verdadera respuesta a
¿Puede este programador ahora desestabilizar sus últimos cambios con algún comando mágico de git?
es en realidad: No, no puedes dejar de grabar solo el último git add
.
Eso es si interpretamos la pregunta como en la siguiente situación:
Archivo inicial:
void foo() {
}
main() {
foo();
}
Primer cambio seguido de git add
:
void foo(int bar) {
print("$bar");
}
main() {
foo(1337);
}
Segundo cambio seguido de git add
:
void foo(int bar, String baz) {
print("$bar $baz");
}
main() {
foo(1337, "h4x0r");
}
En este caso, git reset -p
no ayudará, ya que su granularidad más pequeña son las líneas. git
no sabe eso sobre el estado intermedio de:
void foo(int bar) {
print("$bar");
}
main() {
foo(1337);
}
nunca más.
No puede deshacer la última adición de git, pero puede deshacer todos los add
desde la última confirmación. git reset
sin un argumento de confirmación restablece el índice (cambios en etapas no realizados):
git reset
Puede usar git reset
(ver documentos )
Puedes usar git reset
. Esto ''desestabilizará'' todos los archivos que haya agregado después de su última confirmación.
Si quiere borrar solo algunos archivos, use git reset -- <file 1> <file 2> <file n>
.
También es posible eliminar algunos de los cambios en los archivos usando git reset -p
.
Si desea eliminar todos los archivos agregados de git for commit
git reset
Si quieres eliminar un archivo individual
git rm <file>
Elimine el archivo del índice, pero manténgalo actualizado y déjelo sin cambios confirmados en la copia de trabajo:
git reset head <file>
Restablezca el archivo al último estado desde HEAD, deshaciendo los cambios y eliminándolos del índice:
git reset HEAD <file> git checkout <file> # If you have a `<branch>` named like `<file>`, use: git checkout -- <file>
Esto es necesario ya que el
git reset --hard HEAD
no funcionará con archivos individuales.Elimine
<file>
del índice y el control de versiones, manteniendo el archivo sin versión con cambios en la copia de trabajo:git rm --cached <file>
Elimine
<file>
de la copia de trabajo y el control de versiones por completo:git rm <file>