Aller au contenu

Git/Recettes

Un livre de Wikilivres.
< Git

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]
Options de git reset dans NetBeans

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]

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 dans git reflog). Cela peut donc permettre d'annuler un reset malencontreux.

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.