--- Title: Quelques astuces git Date: 2019-04-22 17:00 Modified: 2023-05-14 20:00+02:00 Author: Fabrice Category: antisèches Tags: git, termtosvg Slug: git-tricks Header_Cover: ../images/covers/water.jpg Summary: Une compilation de commandes git que j’utilise ponctuellement Lang: fr --- Quelques astuces [git](https://git-scm.com/) que j’utilise de temps en temps que j’oublie tout le temps… **Attention :** Je ne suis pas un exemple à suivre comme utilisateur de git, et mes manières sont parfois un peu crues. Récemment, la majorité de mes commits sont dues à [pass]({filename}/software/pass-fr.md), et donc la plupart du temps, je suis en train de réparer mes propres erreurs. Remettre la branche master `master` sur la branche distante `origin/master` : ```sh git checkout origin/master -B master ``` Aller au commit précédent où on avait checkout (de manière similaire à `cd -`) : ```sh git checkout - ``` Retrouver les commits disparus, c’est très utile lorsqu’on a envie de `cherry-pick` un commit orphelin qu’on a oublié il y a quelque temps : ```sh git log --graph --reflog ``` Quelques explications s’imposent : `--graph` montre l’arbre des commits, ce qui se montre utile pour révéler les feuilles orphelines, et `--reflog` mets au jour tous nos secrets les plus sordides. Vous avez peut-être remarqué que vos répertoires git prennent du volume. Pour corriger ça, on peut manuellement appeler le ramasse-miette de notre dépôt. C’est censé se faire tout seul, mais pas assez souvent selon mes standards. ```sh git gc --aggressive ``` Pour ajouter un changement atomique dans un fichier (de manière interactive): ```sh git add -p ``` **Unsafe :** pour réécrire le passé en supprimant un fichier (par exemple si on a commité un donnée *sensible*): ```sh git filter-branch --prune-empty --tree-filter "rm -f ''" HEAD git push --force ``` Une autre astuce utile : `git commit -v`, qui permet de réviser nos changements avant de commiter. Une image vaut mieux que mille mots : Utilisation de git commit -v Une interface ncurses pour git : [tig](https://jonas.github.io/tig/) ```sh tig ``` Pour pouvoir lire les `diff`s plus facilement dans git, je recommande aussi d’utiliser `delta` : . Ce programme permet de rendre la lecture de la sortie de `git diff` proche de ce qu'on peut retrouver dans une forge en ligne comme Gitlab en mettant en surbrillance l’endroit exact où a eu lieu la différence. Une fois le paquet installé (sous le nom de `git-delta`, en tout cas sous [archlinux](https://archlinux.org/)), il suffit de configurer git via : ```gitconfig [core] pager = delta [interactive] diffFilter = delta --color-only [delta] navigate = true # n et N pour se déplacer entre les blocs light = true # pour les terminaux à fond clair theme=Monokai Extended Light [merge] conflictstyle = diff3 [diff] colorMoved = default ``` Qui est une configuration très proche de celle proposée sur le dépôt GitHub du projet.