Git/Recettes
Supprimer un fichier du dépôt tout garder le fichier
modifiergit rm fichier.txt
supprime le fichier du dépôt mais supprime aussi le fichier local.
Pour ne l'enlever que du dépôt, utiliser git rm --cached fichier.txt
.
Ajouter "-r" pour les dossiers.
Annuler une soumission
modifierQuand on ne peut pas réécrire l'historique (par exemple en production) mais qu'il faut annuler un commit, on utilise git revert
avec HEAD pour désigner la dernière soumission effectuée :
$ git revert HEAD
Finished one revert.
[master 47e3b6c] Revert "Soumission 2"
1 files changed, 0 insertions(+), 1 deletions(-)
$ ls -a
. .. fichier.txt .git
Pour signifier d'autres soumissions que la dernière :
git revert HEAD^
: l'avant dernière.git revert HEAD~5
: la cinquième moins récente.git revert e6337879
: la soumission n°e6337879.
Ensuite, il est recommandé de vérifier que le rollback a bien fonctionné en s'assurant de l'absence de différence entre le code actuel et celui de n-1 (où n est le nombre de commits annulés)[1]
git revert --no-commit HEAD~2..HEAD
git diff HEAD~3 HEAD
Annuler un merge
modifierOn ne peut pas annuler un merge comme un commit, il faut indiquer le nombre reverté (où réverter un seul merge de plusieurs commits reverte tous les commits) :
git revert -m 1
Nettoyer les changements non soumis
modifierPour annuler les modifications de fichiers non soumises (discard) :
git clean -f
Pour annuler les créations de fichiers non soumises :
git stash save -u git stash drop "stash@{0}"
Annuler les changements soumis
modifierreset
modifierPar ailleurs, il existe plusieurs niveaux de reset[2] :
- soft : ne touche pas à l'index ni au répertoire de travail. Les fichiers en reset retournent juste de la liste des commités à celle à commiter.
- hard : efface l'index et le répertoire de travail. Cette option équivaut à un reset + clean.
- mixed : celui par défaut, mélange des deux précédents. Il laisse les fichiers du répertoire de travail, mais annule l'index.
- merge
- keep
Pour effacer les changements en cours, en rétablissant les états de la dernière soumission :
$ git reset --hard HEAD
ou
$ git reset --hard e6337879
Pour ne toucher qu'un seul fichier :
$ git checkout fichier.txt
- Pour effacer les deux derniers commits sans toucher aux fichiers :
git reset 'HEAD~2'
. - Pour effacer les deux derniers commits et leurs modifications dans les fichiers :
git reset HEAD~2 --hard
. - Pour revenir deux opérations en arrière sur la branche :
git reset HEAD@{2}
(utilise la liste des opérations visible dansgit reflog
). Cela peut donc permettre d'annuler un reset malencontreux.
restore
modifiergit restore
revient à la version du fichier spécifié en paramètre[3].
Par exemple, pour restaurer tous les fichiers du dossier courant :
git restore .
Pour annuler des "git add" (donc retirer un fichier de la zone de transit) :
git restore --staged mon_fichier.txt
Récupérer une version de fichier
modifierIl faut d'abord récupérer l'identifiant de la version avec git log
:
$ git log
commit 47e3b6cb6427f8ce0818f5d3a4b2e762b72dbd89
Author: NomUtilisateur <NomEmail@exemple.com>
Date: Sat Mar 6 22:24:00 2010 -0400
Revert "Soumission 2"
This reverts commit e6337879cbb42a2ddfc1a1602ee785b4bfbde518.
commit e6337879cbb42a2ddfc1a1602ee785b4bfbde518
Author: NomUtilisateur <NomEmail@exemple.com>
Date: Sat Mar 6 22:17:20 2010 -0400
My second commit
commit be8bf6da4db2ea32c10c74c7d6f366be114d18f0
Author: NomUtilisateur <NomEmail@exemple.com>
Date: Sat Mar 6 22:11:57 2010 -0400
My first commit
Ensuite pour lire la version, utiliser git show
:
$ git show e6337879cbb42a2ddfc1a1602ee785b4bfbde518:fichier.txt
Test Git Wikilivres.
test de suppression Git pour Wikilivres
Créer et appliquer un patch
modifierCréer un patch[4] génère un texte de toute la série des changements entre les branches origines et master.
$ git format-patch origin/master
Pour appliquer un patch :
$ git apply --stat P1.txt # affiche les stats des changements $ git apply --check P1.txt # vérifie les problèmes $ git am < P1.txt # applique le patch dans l'ordre
Le patch est aussi le mode de transfert entre dépôts.