Claro, hago exactamente esto de vez en cuando usando
git update-index --assume-unchanged [<file> ...]
Para deshacer y comenzar a rastrear nuevamente (si olvidó qué archivos no se rastrearon, consulte esta pregunta ):
git update-index --no-assume-unchanged [<file> ...]
Documentación relevante :
- [no-] asumir-sin cambios
Cuando se especifica este indicador, los nombres de objeto registrados para las rutas no se actualizan. En cambio, esta opción establece / desactiva el bit "asumir sin cambios" para las rutas. Cuando el bit "asumir sin cambios" está activado, el usuario promete no cambiar el archivo y le permite a Git suponer que el archivo del árbol de trabajo coincide con lo que está registrado en el índice. Si desea cambiar el archivo de árbol de trabajo, debe desactivar el bit para decirle a Git. Esto a veces es útil cuando se trabaja con un gran proyecto en un sistema de archivos que tiene una lstat(2)
llamada de sistema muy lenta (por ejemplo, cifs).
Git fallará (con gracia) en caso de que necesite modificar este archivo en el índice, por ejemplo, al fusionar en una confirmación; por lo tanto, en caso de que el archivo supuesto no rastreado se cambie en sentido ascendente, deberá manejar la situación manualmente.
Fallar con gracia en este caso significa que si hay algún cambio en ese archivo (cambios legítimos, etc.) cuando realiza una extracción, dirá:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
y se negará a fusionarse.
En ese momento, puede superar esto al revertir sus cambios locales, aquí hay una manera:
$ git checkout filename.ext
luego tire nuevamente y vuelva a modificar su archivo local, o podría configurarlo –no-assume-unchanged
y puede hacer un alijo y fusión normales, etc. en ese punto.