He modificado dos archivos a
, b
en el último commit. Pero el archivo b
no debe confirmarse, ¿cuál es el flujo de trabajo para modificar esto?
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.
... Then stash/delete b, re-commit..
, Aquí no debe la palabraThen
serafter
? ---amend
after stach / delete b, ...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 índicefuente
git 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éngit 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.fuente
Si quieres eliminar b de tu último commit
Si desea eliminar todos los cambios a b en su última confirmación
fuente
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:
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.fuente