Mémo git

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

Plus d'info sur git book

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

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

$ git revert <commit>

reset

Reset a plusieurs usages:

$ git add file          # => staged
$ git reset HEAD file  # => unstaged
$ git reset
$ git reset --hard
$ 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:

Illustration des 2 modes: git-merge

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