Pregunta Eliminar archivos de Git commit


Estoy usando Git y he cometido pocos archivos usando

git commit -a

Más tarde, descubrí que se había agregado erróneamente un archivo a la confirmación.

¿Cómo puedo eliminar un archivo de la última confirmación?


1091
2017-09-18 16:59


origen


Respuestas:


Creo que otras respuestas aquí son incorrectas, porque se trata de mover los archivos erróneamente confirmados al área de preparación de la confirmación anterior, sin cancelar los cambios que se les hicieron. Esto se puede hacer como sugirió Paritosh Singh:

git reset --soft HEAD^ 

o

git reset --soft HEAD~1

Luego restablezca los archivos no deseados para dejarlos fuera de la confirmación:

git reset HEAD path/to/unwanted_file

Ahora vuelve a cometer, incluso puedes volver a usar el mismo mensaje de confirmación:

git commit -c ORIG_HEAD  

2096
2018-03-10 10:56



ATENCIÓN! Si solo desea eliminar un archivo de su confirmación anterior, y mantenlo en el discoleer la respuesta de juzzlin justo arriba.

Si este es tu último compromiso y quieres borre completamente el archivo de su repositorio local y remoto, usted puede:

  1. eliminar el archivo git rm <file>
  2. comprometerse con enmendar la bandera: git commit --amend

La bandera de modificación le dice a git que vuelva a cometer, pero "fusionar" (no en el sentido de fusionar dos ramas) esta confirmación con el último compromiso.

Como se establece en los comentarios, el uso git rm aquí es como usar el rm comando en sí!


217
2017-09-18 17:22



Las respuestas existentes hablan de eliminar los archivos no deseados del último cometer.

Si desea eliminar archivos no deseados de un antiguo commit (incluso push) y no desea crear una nueva confirmación, que es innecesaria, debido a la acción:

1.

Encuentre el compromiso al que desea que se ajuste el archivo.

git checkout <commit_id> <path_to_file>

puedes hacerlo varias veces si quieres eliminar muchos archivos.

2.

git commit -am "remove unwanted files"

3.

Encuentra el commit_id de la confirmación en el que los archivos se agregaron erróneamente, digamos "35c23c2" aquí

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

Este comando abre el editor de acuerdo a su configuración. El predeterminado es vim.

Mueva la última confirmación, que debería ser "eliminar archivos no deseados", a la siguiente línea de la confirmación incorrecta ("35c23c2" en nuestro caso), y configure el comando como fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

Deberías estar bien después de guardar el archivo.

Para terminar :

git push -f

Si desafortunadamente tiene conflictos, debe resolverlos manualmente.


106
2018-01-27 15:24



Como lo indica la respuesta aceptada, puede hacer esto restableciendo la confirmación completa. Pero este es un enfoque bastante pesado.
Una forma más limpia de hacer esto sería mantener la confirmación y simplemente eliminar los archivos modificados de ella.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

los git reset tomará el archivo tal como estaba en la confirmación anterior y lo colocará en el índice. El archivo en el directorio de trabajo está intacto.
los git commit luego comprometerá y comprimirá el índice en la confirmación actual.

Esto esencialmente toma la versión del archivo que estaba en la confirmación anterior y lo agrega a la confirmación actual. Esto no genera ningún cambio neto, por lo que el archivo se elimina de manera efectiva del compromiso.


60
2018-02-25 00:06



Si no ha presionado los cambios en el servidor, puede usar

git reset --soft HEAD~1

Restablecerá todos los cambios y volverá a un compromiso atrás

Si ha modificado sus cambios, siga los pasos tal como los respondió @CharlesB


35
2017-09-18 18:28



¡Eliminar el archivo usando rm lo eliminará!

Siempre está agregando un commit en git en lugar de eliminar, por lo que en esta instancia devuelva el archivo al estado en el que estaba antes de la primera confirmación (esto puede ser una acción de eliminación de 'rm' si el archivo es nuevo) y luego re-commit y el archivo irá.

Para devolver el archivo a un estado anterior:

    git checkout <commit_id> <path_to_file>

o para devolverlo al estado en el CABEZO remoto:

    git checkout origin/master <path_to_file>

luego modifica la confirmación y deberías encontrar que el archivo ha desaparecido de la lista (¡y no ha sido eliminado de tu disco!)


34
2018-01-28 14:00



git checkout HEAD~ path/to/file
git commit --amend

32
2017-08-23 19:01



Lo siguiente desestabilizará solo el archivo que pretendía, que es lo que solicitó el OP.

git reset HEAD^ /path/to/file

Verás algo como lo siguiente ...

Cambios a cometer: (use "git reset HEAD ..." para abandonar la escena)

modificado: / ruta / a / archivo

Cambios no configurados para commit: (use "git add ..." para actualizar   lo que se comprometerá) (use "git checkout - ..." para descartar   cambios en el directorio de trabajo)

modificado: / ruta / a / archivo

  • "Cambios que se comprometerán" es la versión anterior del archivo antes de la confirmación. Esto se verá como una eliminación si el archivo nunca existió. Si confirma este cambio, habrá una revisión que revierte el cambio al archivo en su sucursal.
  • "Cambios no configurados para la confirmación" es el cambio que ha cometido y el estado actual del archivo

En este punto, puede hacer lo que quiera con el archivo, como restablecer a una versión diferente.

Cuando esté listo para comprometerse:

git commit --amend -a

o (si tiene otros cambios que no quiere comprometer, aún)

git commit add /path/to/file
git commit --amend

28
2017-12-07 07:13



Si desea conservar su confirmación (quizás ya haya dedicado un tiempo a escribir un mensaje de confirmación detallado y no quiera perderlo), y solo desea eliminar el archivo de la confirmación, pero no del repositorio por completo:

git checkout origin/<remote-branch> <filename>
git commit --amend

9
2018-06-17 20:07