Mémo git
mar. 12 décembre 2017
Aide mémoire des commandes Git dont j'ai du mal à me souvenir
Configuration globale
La configuration globale de git est stockée dans ~/.gitconfig. Pour un projet la configuration spécifique se trouve dans .git/config.
# Lister toute la configuration
$ git config --global -l
# Configuration du mail
$ git config --global user.email name@domaine.com
Ajouter des fichiers au staging
# Ajouter tous les fichiers modifiés
$ git add .
# Ajouter également les fichier supprimés
$ git add --all # ajouter les fichiers supprimés également
Revenir en arrière
Trois méthodes de retour arrière:
- checkout
- revert
- reset
checkout
Retourner à l'état du projet lors d'un commit
$ git checkout <commit> # ou si le commi et l'avant-avant dernier
$ git checkout master^^
Cette méthode s'appelle detached head.
Après le checkout, Head fait référence à <commit> et non plus au dernier commit (master).
$ git checkout master
Retour de head à master. Attention si des commit ont été fait pendant le détachement de head, ils seront perdus (puisque plus référencé).
revert
- Défaire les modifications du commit
<commit> - On garde l'historique
$ git revert <commit>
reset
Reset a plusieurs usages:
- annuler l'ajout d'un fichier du staging
$ git add file # => staged
$ git reset HEAD file # => unstaged
- Vider le staging
$ git reset
- Vider le staging et annuler les modifications
$ git reset --hard
- Revenir à un ancien commit
$ git reset <commit>
Attention! perte de l'historique
Attention! par défaut Git utilise le mode soft qui conserve l'espace de travail dans son état. Pour revenir dans l'état exacte du commit ancien il faut utiliser le mode hard très dangereux: on perd à la fois les modifications et l'historique. Aucun retour arrière n'est possible
Synthèse
| command | scope | common use cases |
|---|---|---|
| git reset | Commit-level | throw away uncommited changes |
| git reset | File-level | Unstage a file |
| git checkout | Commit-level | Switch between branches or inspect old snapshots |
| git checkout | File-level | Discard changes in the working directory |
| git revert | Commit-level | Undo commits in a public branch |
| git revert | File-level | (N/A) |
Remisage
$ git stash # équivalent à git stash save
$ git stash list
$ git stash apply
$ git stash branch <branch_name> # Embarque le stash dans une nouvelle branche
Merge
2 types de merge:
- Explicit merges (aka non fast-forward)
- Implicit merge via rebase oyu fast-forward merge
Illustration des 2 modes:

Comment faire un rebase
Se positionner sur la branche source (contrairement à un merge) et executer les commandes:
$ git rebase master [-i] # i: interactif
$ git checkout master
$ git merge <branch>
Git remote
Lister les branches distantes
$ git remote -v
Ajout d'une branche distante
Ajouter un repository distant (github) à un projet créé localement
$ git add remote <name> <url>
$ git fetch
pasgrave