¿Cómo hacer para que GIT se olvide de un archivo?

Git Logo Wikipedia

Ocasionalmente en un proyecto disponemos de información sensible o archivos que no queremos subir al proyecto. Como por ejemplo logs, configuración de base de datos o archivos con claves de APIs entre otros. Desgraciadamente si no configuramos bien el .gitignore o si lo añadimos a posteriori git automaticamente realizara el seguimiento de este archivo.

¿Cómo hacer para que git se olvide de el permanentemente?

Es decir, para que el archivo no nos aparezca en el “git status” y lógicamente al hacer git commit no lo agregue al proyecto más… El comando básicamente es este:

Aunque este archivo deja de ser “cometido” por git seguirá presente dentro de nuestro proyecto local y repositorio. El problema, al menos por mi parte, cuando quieres actualizar el proyecto en otro lugar con “git pull” vas a obtener este mensaje:

Para solucionar esto ultimo puedes como te dicen arriba, actualizando los cambios con un commit si tienes cambios por guardar, apilar los cambios “git stash” o haciendo esta ñapa y sobreescribiendo los ficheros:

Si estas trabajando en otra rama debes sustituir “master” con la tuya. Creo que no hay que decir que perderás los datos que no hayas guardado en el proyecto local. Básicamente “git fetch” descarga el repositorio sin mezclar nada y el comando “git reset” digamos que sobreescribe los archivos con lo que hay en el repositorio.

Moraleja del asunto…

Pues que este post lo escribo básicamente para mi, por no configurar correctamente el archivo .gitignore desde un principio. Si se utiliza un IDE como Netbeans que añade archivos automáticamente al proyecto es bastante fácil olvidarse. Ademas esto es un resumen en Español de estas dos discusiones en Stackoverflow: parte 1 y parte 2. Como podéis comprobar no soy el único “noob” en esto. Por último recomiendo a todos los que queráis aprender Git y Github de una forma amena os recomiendo este curso de Codeschool (Ingles), yo ya lo tengo acabado.