Il existe de nombreux outils fournis avec git. L'ensemble de ceux décrit ici ne représentent qu'une petite partie des possibilités de Git. Pour apprendre à connaître Git, la curiosité est de mise et quelques commandes existent pour l'aider :
# Afficher la liste et l'usage des commandes les plus communes git help # Afficher la liste et l'usage de l'ensemble des commandes git help --all # Afficher la liste des guides git help --guides # Afficher l'aide d'une commande ou un guide git help <command>
L'ensemble de ces commandes sont utilisables pour un fichier particulier en ajoutant -- <file_path>
à la fin de la commande.
# Afficher le journal d'évènement git log # Afficher le journal d'évènement avec les statistiques git log --stat # Afficher le journal d'évènement des n dernières révisions git log -n # Afficher le journal d'évènement sur une ligne git log --oneline # Afficher le journal d'évènement entre 2 révisions git log <commit>..<commit> # Afficher l'historique condensé des révisions git log --pretty=oneline --abbrev-commit --graph --decorate # Afficher la liste des étiquettes par date git log --date-order --graph --tags --simplify-by-decoration --pretty=format:'%ai %h %d'
# Ajouter les fichiers à révisionner git add <file1> <file2> # Révisionner les modifications en saisissant un message dans l'éditeur de texte par défaut git commit # Révisionner les modifications en saisissant un titre uniquement sans ouvrir l'éditeur de texte par défaut git commit -m <title> # Révisionner les modifications en saisissant un titre et un message sans ouvrir l'éditeur de texte par défaut git commit -m <title> -m <message> # Il est aussi possible de faire tout ça automatiquement (ce n'est pas recommandé) git commit -a -m <title> -m <message>
git reset HEAD <file>
# Attention, l'utilisation de cette commande est déconseillée si le code a été partagé. git commit --amend --reset-author
# Attention, l'utilisation de cette commande est déconseillée si le code a été partagé. git commit --amend
# Pour modifier la révision bbc643cd git rebase --interactive bbc643cd^ # À ce moment, l'éditeur de texte par défaut va s'ouvrir pour sélectionner les révisions à modifier. # Changer pick pour edit en face des révisions à modifier. # Faire les changements nécessaire et ajouter les fichiers. git add <file1> <file2> # Appliquer les changements git commit --amend # Poursuivre l'application des changements git rebase --continue
# Si la révision n'a pas été partagée et que l'on veut conserver les modifications git reset --soft HEAD~1 # Si la révision n'a pas été partagée et que l'on veut supprimer les modifications git reset --hard HEAD~1 # Si la révision a été partagée git revert HEAD
# Locales git branch # Distantes git branch -r # Toutes git branch -a # Déjà disponibles dans la branche courante git branch --merged # Pas encore disponibles dans la branche courante git branch --no-merged
# La manière rapide git checkout -b <branch> # La manière détaillée git branch <branch> git checkout <branch>
# Récupérer la liste des branches distantes disponibles git fetch origin # Récupérer la liste des branches distantes disponibles en supprimant les branches supprimées - version longue git fetch --prune origin # Récupérer la liste des branches distantes disponibles en supprimant les branches supprimées - version courte git fetch -p origin # Création d'une branche locale à partir de la branche distante git checkout -b <branch> origin/<branch>
git branch -m <old-branch> <new-branch>
# Supprimer une branche qui a été fusionnée git branch -d <branch> # Forcer la suppression d'une branche git branch -D <branch>
# La manière compréhensible git push --delete origin <branch> # La manière moins compréhensible au premier abord git push origin :refs/remote/origin/<branch> # et son raccourci git push origin :<branch>
# Syntaxe courte git branch -u <remote_branch> <local_branch> # Syntaxe longue git branch --set-upstream-to <remote_branch> <local_branch>
git remote prune origin
git diff <branch_1> <branch_2> -- <fichier> # Avec cette syntaxe, la référence peut être une branche, un tag, un commit, ... git diff <reference_1>..<reference_2> <fichier>
# Quand les références des branches sont identiques git push <remote> <branch> # Quand les références des branches sont différentes git push <remote> <src/branch>:<dst/branch>
git merge-base HEAD <branch>
git checkout -
git tag
git tag <tagname>
git tag -a <tagname>
Il faut que l'étiquette existe déjà localement pour pouvoir la créer sur un dépôt distant.
# Pour créer une seul étiquette git push origin <tagname> # Pour créer toutes les étiquettes git push --tags
# La manière compréhensible git push --delete origin <tagname> # La manière moins compréhensible au premier abord git push origin :refs/tags/<tagname> # et son raccourci git push origin :<tagname>
# Récupérer le code associé à l'étiquette git checkout <tagname> # Supprimer l'étiquette locale git tag -d <tagname> # Créer l'étiquette annotée antidatée à la date de la révision GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a <tagname> # Supprimer l'étiquette distante git push origin :refs/tags/<tagname> # Créer l'étiquette distante git push --tags
# Sans espace de nom git notes add -m <message> <commit> # Avec espace de nom git notes --ref=<namespace> add -m <message> <commit>
# Sans espace de nom git log # Avec espace de nom (les caractères de remplacement sont supportés) git log --show-notes=<namespace>
# Sans espace de nom git notes edit <commit> # Avec espace de nom git notes --ref=<namespace> edit <commit>
# Création d'un fichier patch git format-patch <commit.1>..<commit.2> --stdout > <file.patch> # Création d'un fichier patch en changeant le chemin d'accès aux fichiers git format-patch <commit.1>..<commit.2> --src-prefix="a/new/path/" --dst-prefix="b/new/path/" --stdout > <file.patch> # Vérification du patch git apply --check <file.patch> # Application des modifications apportées par le patch git apply <file.patch> # Application des commits apportés par le patch git am <file.patch>
git rebase -i <commit>
git add -i
git checkout <treeish> -- <path>
git show <treeish>:<file>
# Modifications des fichiers du répertoire de travail git diff # Modification des fichiers de la zone de transit git diff --staged git diff --cached # Vérification des erreurs de caractères blancs git diff --check # Modification entre deux branches git diff <branch>..<branch> # Modification entre deux branches (nom et statut) git diff --name-status <branch>..<branch> # Modification entre deux branches (nom seulement) git diff --name-only <branch>..<branch>
Il est possible de filtrer les résultats sur le type de changement en utilisant --diff-filter
. Cette option prend une ou plusieurs valeurs dans la liste suivante :
A
pour les fichiers ajoutés.D
pour les fichiers supprimés.M
pour les fichiers modifiés.R
pour les fichiers déplacés.# Mettre de côté toutes les modifications git stash # Mettre de côté toutes les modifications à l'exception de celles présentent dans l'index git stash --keep-index # Lister les réserves de code git stash list # Appliquer la dernière réserve de code git stash apply # Supprimer la dernière réserve de code git stash drop # Afficher les modifications contenues dans le "stash" git stash show -p stash@{0}
git diff-tree --no-commit-id --name-only -r <treeish>
# Duplique un projet dans un répertoire éponyme créé automatiquement git clone <project> # Duplique un projet dans un répertoire sélectionné git clone <project> <folder>
git archive --format=tar.gz <treeish> > <file>
# Faire un clone brut du projet git clone --bare <old-repository> # Faire un miroir du projet cd old-repository git push --mirror <new-repository> # Suppression du clone brut cd - rm -rf old-repository
# Sans filtre git ls-remote --heads origin # Avec un filtre simple git ls-remote --heads origin master # Avec un filtre complexe git ls-remote --heads origin master develop release\*
git ls-tree -r master --name-only