Skip to main content

Alessandros's Blog - Build with freedom. Share with purpose

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.