21 Mai 2025 - A la folie je GIT
Hey, J’espère que tu as passé une belle journée. Troisième journée d’apprentissage! On continue avec du GIT ☺️
#
Apprentissage du jour
##
git revert
On se rend compte de l’importance des commits atomiques lorsqu’on parle de faire marche arrière. Avec git revert, cela prend tout son sens, imagines devoir revenir en arrière sur un commit qui contient plusieurs changements
git revert <sha>
##
git clean
Il est possible aussi de nettoyer un ensemble de fichier qui n’ont pas été indexés avec la commande git clean. Example un ensemble de fichiers qui ont été ajoutées pour des tests mais qui ne seraient plus utiles à la fin du commit. Attention cependant, git clean ne supprime que les fichiers qui ne sont pas staged ou ignorés (via gitignore)
git clean -n #pour un dry-run
git clean -f #pour forcer le cleanup
##
Git Ignore
.gitignore est utile pour ignorer un certain nombre de fichiers ou répertoires. le fonctionnement général est assez simple à comprendre, mais l’on peut aller plus loin. Il existe des templates prêts à l’emploi pour les différents langages et projets que vous pourriez lancer ici : https://github.com/github/gitignore ou alors https://www.toptal.com/developers/gitignore (plus interactif)
On peut aussi aller plus loin dans la configuration des fichiers que l’on veut ignorer ou pas en ajoutant une négation dans le fichier .gitignore après une exlusion
#contenu de .gitignore
folder/* #ignore le contenu du répertoire folder/
!folder/config.txt #le fichier config.txt dans le répertoire folder ne sera pas ignoré
Il est également possible de parametrer un gitignore file plus global via la commande mais à utiliser avec précaution car les fichier ou répertoires ignorés ne le seront pas dans un projet spécifique partagé avec une équipe de devs.
git config --global core.excludesFile <nomdufichier>
##
Répertoires vides
Ce n’est pas fréquent mais si l’on veut parfois garder des répertoires vides dans la codebase, l’on peut ajouter au répertoire un fichier nommé .gitkeep vide et commit ce dernier. Par défaut Git ne suis pas les répertoires vides
##
Comment l’on référence un commit
L’on peut appeler un commit par son SHA-1, sha mais également par les méthodes suivantes:
- HEAD (en référence à la tête d’écriture des anciennes bandes)
- Tag
- Ancestry (ancêtres en français)
- Branches
Il faut voir le HEAD comme l’endroit ou l’on va écrire le next commit, le HEAD suit toujours l’endroit ou tu te trouves dans le dêpot.
On parle de Ancestry les annotations suivantes
^ = le parent direct du commit
~n = le ennième parent
# pour réferencer donc l'avant dernier commit, l'on écrit
HEAD^ ou HEAD~1
#pour voir le 3eme commit avant le HEAD on écrirait
HEAD^^^ ou plus rapide HEAD~3
# exemple concret
AL: example1 ⎇ main ➤ git show -s HEAD^
commit 9e049249d14ef922ffb8545b343c3ce75e1ff91a
Author: Alessandro <5610654+user@users.noreply.github.com>
Date: Wed May 21 10:42:53 2025 +0200
Extended config.txt with a new line
##
Git Log (advanced)
L’on peut personnaliser git log de multiples manières, c’est assez puissant!
En filtrant par exemple
git log -n 3 # affiche les 3 derniers logs
git log <sha>..<sha> # montre moi les logs entre deux commits
git log -author=<nom> # attention case sensitive
git log --grep=<text> # si l'on veut utiliser les expression régulières, il faut ajouter le paramètre -E
git log --since | --until | --before | --after
et l’on peut formater la sortie:
git log --oneline # raccourci de git log --format=oneline
git log --format=email|full|oneline|reference|fuller|medium|raw|short
git log -p # patch
git log --stat # résume des stats
git log --graph # pratique pour les branches
# une assez cool avec graph (à retenir)
AL: example1 ⎇ main ➤ git log -n 10 --oneline --graph --all --decorate
* c59711f (HEAD -> main) add file3
| * 2f36d90 (new_files) add a new file
| * 9b838bd add a new file
|/
* 9e04924 Extended config.txt with a new line
* 7bab2ad Add empty folder in the repo
* c274c27 Start tracking congif.txt
* 5b1828d Excludes files folder but not config in .gitignore
* 3b8b39c Revert "excludes logs folder except config in .gitignore"
* dc1b7cf excludes logs folder except config in .gitignore
* ef048cd Reapply "add file2.txt to the repository"
Comme vue avec la dernière, il est possible de combiner plusieurs filtres et formats
##
Git Branch & Switch
Pour créer une branche
git branch <branchname>
git switch -create <branchname>
git switch -c <branchname>
Pour changer de branche
git switch <branchname>
Attention cependant, il est pas possible de switcher de branche si des changement n’ont pas été commit, l’on peut utiliser l’option -f pour forcer
On peut aussi renommer des branches
git branch -m <newbranchname> # -m pour mv. si l'on ne donne un seul paramètre après -m, git considère que l'on veut changer le nom de la branche active, !!! attention donc !!!
# sinon
git branch -m <actualname> <newname>
Supprimer une branche
git branch -d <branchname>
Cependant, il existe deux protections
- On ne peut supprimer la branche active, il faut switcher avant de branche
- On ne peut pas supprimer une branche ou l’on a des commit non merged (sauf avec l’option -D (force delete))
##
Personalisation du prompt
il est possible de personaliser l’invite de la ligne de commande comme l’exemple ici
Il est possible de récupérer le script git-prompt.sh ici https://github.com/git/git/tree/master/contrib/completion Ensuite le copier dans le répertoire personnel et ouvrir .zshrc (sur mac) et de copier à la fin du fichier
#GIT branch
source ~/.git-prompt.sh
setopt PROMPT_SUBST
autoload -Uz colors && colors
PS1='AL: %F{magenta}%c%f %F{red}$(__git_ps1 "⎇ %s")%f %F{yellow}➤%f '
le AL ce cont mes initiales mais vous pouvez mettre ce que vous voulez ☺️
Dernière chose que j’ai trouvé sur utile lors de ma phase de pratique ! Je trouve que parfois la documentation de Git est pas très ordonnée, par exemple pour git config et ses options, elles sont toutes mélangées. Mais l’on peut chercher dans le help en tapant simplement / et ensuite ce que l’on cherche
/core.excludesFile
/--graph
Fini le doom scrolling dans le texte 😉.
A demain.