Respuestas:
Actualización (un par de años después)
Es trivial eliminarlo solo del índice.
Verdadero: puede restablecer un archivo a su contenido de índice con bastante facilidad, como sugiere la respuesta más reciente (escrita por Matt Connolly ):
git reset HEAD^ path/to/file/to/revert
HEAD^
permite que el archivo acceda a su contenido en la confirmación anterior antes de la última.
Entonces puedes git commit --amend
, como originalmente escribí a continuación.
Con Git 2.23 (agosto de 2019), puede usar el nuevo git restore
comando
git restore --source=HEAD^ --staged -- path/to/file/to/revert
más corta:
git restore -s@^ -S -- path/to/file/to/revert
De nuevo, puedes hacerlo git commit --amend
, como originalmente escribí a continuación.
Respuesta original (enero de 2011)
Si esta es su última confirmación (y no la ha empujado a ninguna parte), puede modificarla :
(primer escondite o guardar b
)
git commit --amend
Luego elimine b, vuelva a confirmar. Restaura b y listo.
--amend
Se utiliza para modificar la punta de la rama actual.
Prepare el objeto de árbol en el que desea reemplazar la última confirmación como de costumbre (esto incluye las rutas habituales -i / -o y explícitas), y el editor de registro de confirmación se siembra con el mensaje de confirmación desde la punta de la rama actual.
La confirmación que crea reemplaza la sugerencia actual; si se trata de una fusión, tendrá los padres de la sugerencia actual como padres, por lo que se descarta la confirmación principal actual.
git diff --name-only HEAD^
- (opcional) se usa para enumerar los archivos que cambiaron en la última confirmación.git reset HEAD^ path/to/file/to/revert
- para restablecer el índice a esa última versión, dejando la copia de trabajo intacta.git commit --amend
- para modificar ese último compromiso para incluir los cambios del índicegit commit -a --amend
(es decir, no agregar archivos) para el paso 3, o confirmará los cambios de la copia de trabajo, que son las ediciones que está tratando de eliminar. Un paso opcional 2.5 podría ser también git checkout path/to/file/to/revert
limpiar su copia de trabajo.
git rm --cached path/to/file/to/revert
puede eliminar el archivo sin eliminarlo del árbol.
Alternativamente, si está utilizando git gui
, simplemente seleccione la opción "Modificar la última confirmación", el archivo agregado aparece en la lista "En etapas", haga clic en su icono para moverlo a la lista "No en escena" y confirme.
Si quieres eliminar b de tu último commit
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
Si desea eliminar todos los cambios a b en su última confirmación
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
y eliminar el baile de copia de seguridad / restauración (-1).
Una alternativa que no requiere piratería de índices, pero que conserva el antiguo mensaje de confirmación:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
Me gusta esto porque (a) usa comandos que uso regularmente y (b) puedo hacer git add -p
para averiguar exactamente qué es lo que quiero comprometer.
... Then stash/delete b, re-commit..
, Aquí no debe la palabraThen
serafter
? ---amend
after stach / delete b, ...