====== 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
=== Autre branche ===
git branch -m
==== 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
=== A distance ===
git push --delete origin
==== 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