Git/Recettes
Supprimer un fichier du dépôt tout garder le fichier
[modifier | modifier le wikicode]git 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
[modifier | modifier le wikicode]Quand 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
[modifier | modifier le wikicode]On 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
[modifier | modifier le wikicode]Pour 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
[modifier | modifier le wikicode]reset
[modifier | modifier le wikicode]Par 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
[modifier | modifier le wikicode]git 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
[modifier | modifier le wikicode]Il 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
[modifier | modifier le wikicode]Cré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.