Aide Git


Configuration

git config --global user.name "Aymeric Lagier"
git config --global user.email "aymeric@lagier.xyz"
git config --list

Ces informations se retrouvent dans ~/.gitconfig

Connaître la branche courante

git status

Init

git init <project_name>

Ajout de fichier

Ajout récursif

git add .

Ajout en prenant en compte les rename/delete

git add -A

Commit

git commit -am "Message"

-a : stage tous les fichiers trackés qui sont modifiés et supprimés (ne touche pas aux fichiers qui n’ont pas été ajoutés)

Retourner au commit précédent

git reset HEAD^

Retourner à un commit en particulier

git reset <commit_id>

Lister tous les fichiers trackés par git

git ls-files

Unstage un fichier

git reset HEAD <file>

Ne revert pas les modifications sur le fichier

Renommer/Déplacer un fichier

git mv <name> <new_name>

Si c’est fait avec juste le mv de bash, le fichier sera considéré comme supprimé et un nouveau fichier “untracked” sera vu.

Supprimer un fichier

git rm <name>

Pour annuler la suppression

git reset HEAD <file>
git checkout -- <file>

Mise à jour de l’index git

git add -u

Logs

git log

Historique des commandes git

git reflog

Création d’un alias

git config --global alias.<alias_name> "<command_without_git_prefix>"

Appel de l’alias

git <alias_name>

Diff

Entre le working directory et le staging

En CLI :

git diff

Avec l’outil de diff configuré

git difftool

Entre le working directory et le .git

En CLI :

git diff HEAD

Avec l’outil de diff configuré

git difftool HEAD

Entre le staging et le .git

En CLI :

git diff --staged HEAD

Avec l’outil de diff configuré

git difftool --staged HEAD

Pour un fichier particulier

git diff -- <file_name>

Entre un commit et le dernier commit

git diff <commit_hash> HEAD

Entre le dernier commit et celui juste avant

git diff HEAD HEAD^

Entre 2 commits

git diff <commit_hash_1> <commit_hash_2>

Entre le .git et l’origin

git diff master origin/master

Entre 2 branches

git diff <branche1> <branche2>

Entre 2 tags

git diff <tag1> <tag2>

Branching

Lister les branches

Local et remote

git branch -a

Local

git branch

Créer une branche

git branch <branch_name>

Changer de branche

git checkout <branch_name>

Créer une branche et faire un checkout

git checkout -b <branch_name>

Renommer une branche

git branch -m <old_branch_name> <new_branch_name>

Supprimer une branche

git branch -d <banch_name>	
  • Ne peut s’effectuer que depuis une autre branche
  • Utile après le merge d’une feature branch vers une autre branche

Update

git pull

git pull

git fetch

git fetch
  • Ne fusionne pas les modifications distantes avec la branche locale
  • Utile pour mettre à jour les informations de la vue de l’origin

Merging

git checkout <destination_branch_name>
git merge <feature_branch_name>

Fast-forward

  • Inclut tous les commits de la feature branch dans la branche de destination
  • Possible uniquement si la branche de destination n’a pas eu de nouveaux commits depuis la création de la feature branch

Merge sans fast-forward

git merge <feature_branch_name> --no-ff
  • Permet de spécifier un message de commit
  • Les commits de la feature branch ne seront pas indiqués dans l’historique de la branche de destination

Gestion des conflits lors d’un merge

git mergetool
git commit -m "<commit_message>"

Rebase

Avancer le point de fork entre 2 branches en appliquant les commits de la branche source sur la branche destination.

Avant le rebase

Before rebase

Après le rebase

After rebase

Depuis une feature branch

git rebase <source_branch>

Annuler un rebase

git rebase --abort

Continuer un rebase après un conflit

git rebase --continue

Rebase depuis l’origin

git pull --rebase origin <branch_name>

Stash

  • Met de côté des modifications sans les commiter (Work In Progress)
  • Possibilité de faire un stash sur la branche master et de le récupérer sur une autre branche

Sauvegarder des modifications (fichiers tracked uniquement)

git stash [save "<stash_message>"]

Sauvegarder les modifications de tous les fichiers

git stash -u

Récupérer les modifications du dernier stash

git stash apply

Récupérer les modifications d’un stash en particulier

git stash apply stash@{<stash_id>}

Supprimer le dernier stash

git stash drop

Supprimer un stash en particulier

git stash drop stash@{<stash_id>}

Supprimer tous les stash

git stash clear

Récupérer le dernier stash et le supprimer

git stash pop

Lister les stash

git stash list

Afficher les détails d’un stash

git stash show stash@{<stash_index>}

Stash sur une autre branche

git stash -u
git stash branch <new_branch>
  • Créé la branche
  • Récupère le stash
  • Supprimer le stash

Tag

Créer un tag simple

git tag <tag_name>

Créer un tag annoté

git tag -a <tag_name> -m "<commit_message>"

Créer un tag annoté sur un commit précis

git tag -a <tag_name> <commit_id>

Lister les tags

git tag --list

Voir le commit associé au tag

git show <tag_name>

Supprimer un tag

git tag --delete <tag_name>

Changer un tag de commit

git tag -a <tag_name> -f <new_commit_id>

Push d’un tag en précis

git push origin <tag_name>

Push de tous les tags

git push origin <branch_name> --tags

Supprimer un tag sur l’origin

git push origin :<tag_name>