Git

Configuration

Configuration de l'identité

git config --global user.name "John Doe"
git config --global user.email "john.doe@example.com"

Stockage des identifiants

Mise en cache pour une durée déterminée (ici, 12 heures)

git config --global credential.helper 'cache --timeout 43200'

Stockage permanant dans un fichier

git config --global credential.helper 'store --file ~/.git-credentials'

Annulation du stockage des identifiants

git config --global --unset credential.helper

Créer un alias de commande Git

git config --global alias.rename 'branch -m'

Changer l'éditeur de texte par défaut

git config --global core.editor "vim"

Opérations

Revenir à l'état du dernier commit

git reset --hard

Supprimer le dernier commit

git reset --hard HEAD^

Supprimer les n derniers commits

git reset --soft HEAD~n

Pour annuler les modifications, remplacer soft par hard.

Puis pour posser la suppression sur le dépôt distant :

git push origin +HEAD

Depuis un dépôt “bare”, remplacer –hard par –soft.

Restaurer des fichiers depuis un commit

git checkout c5f567 -- file1/to/restore file2/to/restore

Pour restaurer les fichier avant le commit (ici 1 commit avant) :

git checkout c5f567~1 -- file1/to/restore file2/to/restore

Fusionner les derniers commits

git rebase -i a7cc4794a8802708b2eaa75debb40c993f0fa958

L'ID est celui du commit qui précède le dernier membre de la fusion

OU

git rebase -i --root main

Combiner tous les commits en un seul

git rebase --root -i

Puis remplacer toutes les occurrences de pick par squash sauf la première. Sous vim, il est possible de faire :

:%s/pick/squash/g

Changer le commentaire du dernier commit

git commit --amend -m "Nouveau commentaire"

Changer l'auteur du dernier commit

git commit --amend --author="Benjamin Féron <50001976+benjamin-feron@users.noreply.github.com>"

Changer l'auteur de tous les commits selon un filtre

git filter-branch -f --env-filter '
  WRONG_EMAIL="wrong@email.com"
  NEW_NAME="New Name"
  NEW_EMAIL="new@email.com"

  if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
  then
      export GIT_COMMITTER_NAME="$NEW_NAME"
      export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
  fi
  if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
  then
      export GIT_AUTHOR_NAME="$NEW_NAME"
      export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
  fi
  ' --tag-name-filter cat -- --branches --tags

Renommer une branche

Branche courante

git branch -m <newname>

Autre branche

git branch -m <newname> <newname>

Supprimer une branche distante

git push --delete origin v2.0

Pousser une branche locale

git push -u origin feature_branch_name

Pousser toutes les branches

git push --all origin

Re-synchroniser la branche courante avec la branche distante lorsqu'un simple pull ne suffit pas

git pull --rebase origin master

Supprimer un tag

Localement

git tag -d <tagname>

A distance

git push --delete origin <tagname>

Supprimer tous les tags

git tag | xargs git tag -d

Voir le nombre de contributions par auteur

Avec tous les emails utilisés

git shortlog -nse

Avec emails combinés

git shortlog -ns