blog/content/cheat-sheets/git-fr.md

96 lines
3.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 jutilise ponctuellement
Lang: fr
---
Quelques astuces [git](https://git-scm.com/) que jutilise de temps en temps que
joublie 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, cest très utile lorsquon a envie de
`cherry-pick` un commit orphelin quon a oublié il y a quelque temps:
```sh
git log --graph --reflog
```
Quelques explications simposent: `--graph` montre larbre 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.
Cest 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 <file>
```
**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 '<fichier>'" 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:
<object data="/examples/git-cv.svg" width="100%">Utilisation de git commit -v</object>
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
dutiliser `delta`: <https://github.com/dandavison/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 lendroit 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.