ver tipos tag qué modificados existen etiquetas crear archivos git git-commit

tipos - Eliminar archivos de Git commit



tipos de etiquetas en git (21)

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

Si esta es su última confirmación y desea eliminar completamente el archivo de su repositorio local y remoto , puede:

  1. eliminar el archivo git rm <file>
  2. confirmar con modificar git commit --amend : git commit --amend

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

Como se indica en los comentarios, usar git rm aquí es como usar el comando rm sí mismo.

Estoy usando Git y he cometido pocos archivos usando

git commit -a

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

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


Algo que funcionó para mí, pero aún creo que debería haber una mejor solución:

$ git revert <commit_id> $ git reset HEAD~1 --hard

Simplemente deje el cambio que desea descartar en el otro compromiso, revise otros

$ git commit --amend // or stash and rebase to <commit_id> to amend changes


Como 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 el compromiso y simplemente eliminar los archivos modificados.

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

El git reset tomará el archivo como estaba en la confirmación anterior, y lo colocará en el índice. El archivo en el directorio de trabajo está intacto.
La git commit se comprometerá y aplastará el índice en la confirmación actual.

Básicamente, toma la versión del archivo que estaba en la confirmación anterior y la agrega a la confirmación actual. Esto no produce ningún cambio neto, por lo que el archivo se elimina de la confirmación.


Creo que otras respuestas aquí son incorrectas, porque se trata de mover los archivos cometidos por error al área de preparación del compromiso anterior, sin cancelar los cambios realizados en ellos. Esto se puede hacer como Paritosh Singh sugirió:

git reset --soft HEAD^

o

git reset --soft HEAD~1

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

git reset HEAD path/to/unwanted_file

Ahora confirme de nuevo, incluso puede reutilizar el mismo mensaje de confirmación:

git commit -c ORIG_HEAD


Eliminar el archivo usando rm lo eliminará!

Siempre se agrega a un commit en git en lugar de eliminar, por lo que en este caso, devuelva el archivo al estado en que se encontraba antes del primer commit (esto puede ser una acción de eliminación ''rm'' si el archivo es nuevo) y luego volver a confirmar y el archivo irá.

Para devolver el archivo a algún estado anterior:

git checkout <commit_id> <path_to_file>

o para devolverlo al estado en el HEAD remoto:

git checkout origin/master <path_to_file>

luego modifique la confirmación y debería encontrar que el archivo ha desaparecido de la lista (¡y no se ha eliminado de su disco!)


En realidad, creo que una forma más rápida y sencilla es usar el modo interactivo git rebase.

git rebase -i head~1

(o cabeza ~ 4, cuanto quieres ir)

y luego, en lugar de ''elegir'', use ''editar''. No me di cuenta de lo poderoso que es ''editar''.

https://www.youtube.com/watch?v=2dQosJaLN18

Espero que te sea de utilidad.


Esto me ha funcionado para eliminar el archivo del repositorio de bits en el que empujé el archivo para bifurcar inicialmente.

git checkout origin/develop <path-to-file> git add <path-to-file> git commit -m "Message" git push


Haz una secuencia de los siguientes comandos:

//to remove the last commit, but preserve changes git reset --soft HEAD~1 //to remove unneded file from the staging area git reset HEAD `<your file>` //finally make a new commit git commit -m ''Your message''


Las respuestas existentes hablan sobre la eliminación de los archivos no deseados de la última confirmación.

Si desea eliminar los archivos no deseados de una confirmación antigua (incluso empujada) y no desea crear una confirmación nueva, que es innecesaria, debido a la acción:

1.

Encuentre la confirmación con la que desea que se ajuste el archivo.

git checkout <commit_id> <path_to_file>

puede hacer esto varias veces si desea eliminar muchos archivos.

2.

git commit -am "remove unwanted files"

3.

Encuentre el commit_id del commit en el que se agregaron los archivos por error , digamos "35c23c2" aquí

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

Este comando abre el editor de acuerdo con 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 establezca 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 tienes conflictos, tienes que resolverlos manualmente.


Lo siguiente desestabilizará solo el archivo que deseaba, que es lo que pidió el OP.

git reset HEAD^ /path/to/file

Verás algo como lo siguiente ...

Cambios que se deben confirmar: (use "git reset HEAD ..." para anular el escenario)

modificado: / ruta / a / archivo

Cambios no preparados para confirmación: (use "git add ..." para actualizar lo que se confirmará) (use "git checkout - ..." para descartar los cambios en el directorio de trabajo)

modificado: / ruta / a / archivo

  • "Cambios para confirmar" es la versión anterior del archivo anterior a la confirmación. Esto parecerá 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 preparados para confirmación" es el cambio que confirmó 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 en curso que aún no desea realizar)

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


Si desea conservar su confirmación (tal vez ya haya pasado un tiempo escribiendo 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


Si está utilizando GitHub y aún no ha enviado la confirmación, GitHub Desktop resuelve este problema fácilmente:

  1. Elegir repositorio -> Deshacer la confirmación más reciente
  2. Deselecciona el archivo que agregaste por error. Su mensaje de confirmación anterior ya estará en el cuadro de diálogo.
  3. Presiona el botón Commit!

Si no ha insertado los cambios en el servidor, puede utilizar

git reset --soft HEAD~1

Se restablecerán todos los cambios y se revertirá a un compromiso.

Si ha presionado sus cambios, siga los pasos como lo responde @CharlesB


Si ya no necesitas ese archivo, podrías hacerlo.

git rm file git commit --amend git push origin branch


Solo quería complementar la respuesta principal, ya que tenía que ejecutar un comando adicional:

git reset --soft HEAD^ git checkout origin/master <filepath>

¡Aclamaciones!


Te explicaré con el ejemplo.
Sean A, B, C 3 comillas sucesivas. La confirmación B contiene un archivo que no debería haberse confirmado.

git log # take A commit_id git rebase -i "A_commit_ID" # do an interactive rebase change commit to ''e'' in rebase vim # means commit will be edited git rm unwanted_file git rebase --continue git push --force <branchName>


Tenía el mismo problema en el que tengo cambios en una sucursal local donde quería revertir un solo archivo. Lo que funcionó para mí fue ...

( característica / target_branch a continuación es donde tengo todos mis cambios, incluidos aquellos que quería deshacer para un archivo específico)

( origin / feature / target_branch es la rama remota a la que quiero enviar mis cambios)

(la característica / la puesta en escena es mi rama temporal de la puesta en escena donde presionaré de todos mis cambios deseados, excluyendo el cambio a ese único archivo)

  1. Crear una sucursal local desde mi origen / característica / target_branch - llamada característica / puesta en escena

  2. Combiné mi función de rama local / target_branch en funcionamiento a la rama de función / puesta en escena

  3. Se revisó la función / puesta en escena y luego se reinició git --soft ORIG_HEAD (Ahora todos los cambios de la función / puesta en escena ''se pondrán en escena pero sin confirmar).

  4. Desglosado el archivo que he registrado previamente con cambios innecesarios

  5. Se cambió la rama ascendente para la característica / organización por etapas a origin / feature / target_branch

  6. Comprometí el resto de los cambios por etapas y los envié en sentido ascendente a mi origen / característica / destino_branch remoto


Usar git GUI puede simplificar la eliminación de un archivo de la confirmación anterior.

Suponiendo que esto no es una rama compartida y no te importa reescribir el historial , ejecuta:

git gui citool --amend

Puede deseleccionar el archivo que se confirmó por error y luego hacer clic en "Confirmar".

El archivo se elimina de la confirmación, pero se mantendrá en el disco . Por lo tanto, si desmarca el archivo después de agregarlo por error, se mostrará en su lista de archivos sin seguimiento (y si desmarca el archivo después de modificarlo por error, se mostrará en los cambios no preparados para la lista de confirmación).


git reset --soft HEAD^ devuelve su confirmación, y cuando escribe el git status , le indica qué hacer:

Changes to be committed: (use "git reset HEAD <file>..." to unstage)


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


git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "removed unwanted file from git"

te dejará el archivo local todavía. Si tampoco desea el archivo localmente, puede omitir la opción --cached.

Si todo el trabajo está en su sucursal local, necesita mantener el archivo en una confirmación posterior y, como tener un historial limpio, creo que una forma más sencilla de hacerlo podría ser:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file> git commit --squash <commit_id> git add <file_to_remove_from_commit_<commit_id>_which_added_file> git commit -m "brand new file!" git rebase --interactive <commit_id>^

y luego puede terminar el rebase con facilidad sin tener que recordar comandos más complejos o enviar un mensaje o escribir tanto.