Git: elimine un solo file de la sucursal, manteniéndolo en el proyecto

En algún momento debí haber editado un file no relacionado con la twig (problema) en el que estaba trabajando. Accidentalmente lo empujé a Github y lo vi cuando creé una Solicitud de extracción.

Quiero eliminar el file de mi sucursal, pero no del proyecto, es decir: simplemente no puedo eliminar el file y enviarlo como una confirmación.

He intentado:

git reset HEAD^ path/file.ext

pero no tuvo suerte (no pasó nada, no hubo errores y el file no revertió).

¿Alguien sabría la manera correcta de hacer esto?

Por lo que parece, básicamente desea eliminar todos los cambios para el file en su request de fusión. Lo primero que debe hacer es get una copy limpia del file y agregarlo a su sucursal.

 git checkout master -- <the file> 

Ahora confirma estos cambios y envía la nueva confirmación a tu control remoto. La request de extracción debe actualizarse para que ya no tenga los cambios en este file.

Si usted es la única persona que ha utilizado la twig, puede volver a establecer sus compromisos para que este último compromiso ya no esté en su historial (pero realmente no es un gran problema). Para eso, podrías git rebase -i master , eligiendo "aplastar" los commits. Para actualizar las confirmaciones en la request de extracción, deberá hacer git push -f <your branch> . Para que los nuevos commits sobrescriban, los viejos. Este paso es completamente opcional.

¿Cuántas confirmaciones hay en este único file? La forma más simple es volver a establecer la base desde el maestro y editar esos commits, como este:

 git rebase -i master # find the relevant commits and use `edit` instead of `pick` git reset --soft HEAD~1 -- file # makes the changed file staged to be commit (but we don't want that) git checkout -- file # revert the changes staged again in the previous command git commit --amend git rebase --continue git push --force origin <your-branch-name> 

Ahora debe tener un historial de confirmación limpio sin cambios en el file específico.

Si no es un file confidencial, puede simplemente eliminarlo y presionar la nueva confirmación.

 git rm that_file git commit git push 

El file permanecerá en el historial, pero no aparecerá en la fusión final.

Si es un file confidencial, como si tuviera passwords o información personal. O si solo desea proporcionar un historial más limpio, puede eliminarlo del historial con git rebase -i master (o cualquier twig de la que se haya derivado). Esto le dará la oportunidad de reescribir la confirmación que accidentalmente incluyó ese file. Reescribe la confirmación y git push --force para enviar la nueva versión del historial de sucursal.

En lugar de entrar en detalles, lo referiré al capítulo de Reescribir el historial de Pro Git .