Un problème que je rencontre souvent sur le canal #git sur Freenode est celui du débutant surpris de voir un fichier dans l’historique alors que celui ci est décrit dans le fichier .gitignore. La réponse à cette question est assez simple ! La réponse est assez simple ! Quand vous demander à Git d’ignorer des fichiers, cela ne fait qu’arrêter de suivre les modifications d’un fichier, et rien d’autre. Cela entraine que l’historique se souviendra de ce fichier et le conservera.
Si vous voulez supprimer un fichier de votre dépôt, mais que vous voulez le garder dans votre répertoire de travail, utiliser la commande suivante:
git rm --cached <file>
Cependant, le fichier sera conservé dans votre historique. Si vous voulez le supprimer de votre historique, vous avez deux options: réécrire les commits ou recommencer tout. Ces deux options sont mauvaises, et pour une bonne raison: Git essaie au maximum de ne pas perdre vod données. Comme pour le rebasing, Git vous force à faire consciemment ces opérations parce qu’elles entrainent une perte de données.
Si vous voulez vraiment retirer un fichier de l’historique, git filter-branch
est l’outil qu’il vous faut. Il vous faudra lire le manuel avant de l’utiliser, car cette commande réécrit les commits relatifs au projet. C’est un bon outil pour pas mal d’opérations, et il permet de faire beaucoup de choses comme supprimer entièrement les commits d’un auteur ou de déplacer la racine d’un projet. La commande pour supprimer un fichier de toutes les versiosn est la suivante:
git filter-branch --index-filter 'git rm --cached <file>' HEAD
Cette opération est utile quand vous avez besoin de détruire des informations sensibles ou confidentielles que vous pourriez avoir dans votre dépôt. A l’avenir, plus d’astuces vous montrerons tout ce que filter-branch
peut faire. Si vous connaissez une astuce sur ce sujet, Merci de nous le faire savoir dans les commentaires ou proposer une astuce!