Git en ligne de commande
Voici un glossaire des lignes de commandes utile sous GIT :
Création d’un dépôt
créez un nouveau dossier, ouvrez-le et exécutez la commande
git init
pour créer un nouveau dépôt.
Cloner un dépôt
créez une copie de votre dépôt local en exécutant la commande
git clone /path/to/repository
si vous utilisez un serveur distant, cette commande sera
git clone username@host:/path/to/repository
Ajouter & valider
Vous pouvez proposer un changement (l’ajouter à l’Index) en exécutant les commandes
git add <filename>
git add *
C’est la première étape dans un workflow git basique. Pour valider ces changements, utilisez
git commit -m "Message de validation"
Le fichier est donc ajouté au HEAD, mais pas encore dans votre dépôt distant.
Ajout partiel d’un fichier
git add -p <filename>
Avec cette commande, git passe chaque block de changement du fichier en revue et demande s’il doit l’ajouter. Les options sont :
y
Ajoute le bloc pour le prochain commitn
n’ajoute pas pour le prochain commitq
quitte, n’ajoute pas le bloc ni aucun des blocs suivanta
Ajoute le bloc et tous les blocs suivantd
n’ajoute ni ce bloc ni les blocs suivantg
Sélectionne le bloc auquel on veut se rendre/
Cherche un blocj
Laisser ce bloc comme non décidé et passer au suivant non décidéJ
Laisser ce bloc comme non décidé et passer au suivantk
Laisser ce bloc comme non décidé et revenir au bloc non décidé précédentK
Laisser ce bloc comme non décidé et revenir au bloc précédents
Diviser le bloc courant en plusieurs blocs plus petite
Éditer manuellement le bloc courant?
Imprimer l’aide
Envoyer des changements
Vos changements sont maintenant dans le HEAD de la copie de votre dépôt local. Pour les envoyer à votre dépôt distant,
exécutez la commande
git push origin master
Remplacez master par la branche dans laquelle vous souhaitez envoyer vos changements.
Si vous n’avez pas cloné votre dépôt existant et voulez le connecter à votre dépôt sur un serveur distant,
vous devez l’ajouter avec
git remote add origin <server>
Maintenant, vous pouvez envoyer vos changements vers le serveur distant sélectionné
Branches
Créer une nouvelle branche nommée “feature_x” et passer dessus pour l’utiliser
git checkout -b feature_x
retourner sur la branche principale
git checkout master
et supprimer la branche
git branch -d feature_x
une branche n’est pas disponible pour les autres tant que vous ne l’aurez pas envoyée vers votre dépôt distant
git push origin <branch>
Pour supprimer toutes les références distantes à des branches supprimées :
git remote prune origin
Renomer une branche
git branch --move old_name new_name
git checkout new_name
git branch --unset-upstream
git push origin :old_name
git push --set-upstream origin new_name
Purger les branches locales
Après un peu d’utilisation de git, si on a l’habitude de checkout beaucoup de branches, on se retrouve avec un stock important de branche mortes, supprimé du remote mais toujours présente en local. Voilà une commande pour les purger. Ca ne supprime que les branches déjà mergé et qui trackent une branche remote disparue.
LANG=en_US git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}' | xargs git branch -d
Note que si on enlève la dernière partie, ça ne fait que les lister.
Le LANG=en_US
permet d’éviter les problèmes de changement de traduction.
Extraire une branche dans un autre répertoire
C’est la magie git worktree
. La branche est extraite dans un nouveau répertoire, tous les commits sur cette branch sont instantanément visible dans le repo principal.
git worktree add <chemin> <ref/branche/commit/tag>
et pour supprimer
git worktree add <chemin>
Mettre à jour & fusionner
pour mettre à jour votre dépôt local vers les dernières validations, exécutez la commande git pull
dans votre espace de travail pour récupérer et fusionner les changements distants.
A noter que par défaut git fait un merge. Mais on peut lui demander de faire un rebase. A peine plus risqué en termes de conflicts, ça permet de garder un historique propre. A partir de la 2.9 il est possible d’utiliser en plus l’autostash
git pull --rebase --autostash
.
Pour fusionner une autre branche avec la branche active (par exemple master), utilisez git merge <branch>
dans les deux cas, git tente d’auto-fusionner les changements. Malheureusement, ça n’est pas toujours possible et
résulte par des conflits. Vous devez alors régler ces conflits manuellement en éditant les fichiers indiqués par git.
Après l’avoir fait, vous devez les marquer comme fusionnés avec git add <filename>
après avoir fusionné les changements, vous pouvez en avoir un aperçu en utilisant git diff <source_branch> <target_branch>
.
tags
il est recommandé de créer des tags pour les releases de programmes. C’est un concept connu, qui existe aussi dans SVN.
Vous pouvez créer un tag nommé 1.0.0 en exécutant la commande
git tag 1.0.0 1b2e1d63ff
le 1b2e1d63ff désigne les 10 premiers caractères de l’identifiant du changement que vous voulez référencer avec ce tag.
Vous pouvez obtenir cet identifiant avec
git log
vous pouvez utiliser moins de caractères de cet identifiant, il doit juste rester unique.
Logs
Rechercher un commit qui supprime une ligne
git log -S chaine_supprimée chemin/du/fichier.txt
Remplacer les changements locaux
Dans le cas où vous auriez fait quelque chose de travers (ce qui bien entendu n’arrive jamais ;)
vous pouvez annuler les changements locaux en utilisant cette commande
git checkout -- <filename>
cela remplacera les changements dans votre arbre de travail avec le dernier contenu du HEAD.
Les changements déjà ajoutés à l’index, aussi bien les nouveaux fichiers, seront gardés.
Si à la place vous voulez supprimer tous les changements et validations locaux, récupérez le dernier historique depuis
le serveur et pointez la branche principale locale dessus comme ceci
git fetch origin
git reset --hard origin/master
Comptage des commits par utilisateur
git shortlog -s -n
Conseils utiles
utiliser des couleurs dans la sortie de git
git config color.ui true
afficher le journal sur une seule ligne pour chaque validation
git config format.pretty oneline
utiliser l’ajout interactif
git add -i