SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Comment maîtriser Git
et produire de beaux commits
Parce que commiter c’est bien, mais quand c’est pratique, c’est mieux !
Julien
Maitrehenry Qui suis-je?
Dev, DevOps, Cloud Architect, mentor
Co-fondateur @Kumojin
Kumojin.com
Github.com/jmaitrehenry
jmaitrehenry.ca
Qu’est-ce que Git et Github ?
Quelques cas d’usages sympas
Branche de prod vs tag ?
Signature de commit
Lancer de tomates 🍅 (alias Q&A)
AGENDA
Qu’est-ce que Git?
QU’EST-CE QUE
git ?
VCS – Version Control System
De type graph
Décentralisé
Open Source
Plateforme en ligne (SaaS) autour de Git
Offre des outils, des automatisations, des intégrations, etc.
Repo Git centralisé et géré
Le vocabulaire de git
Commit
Branche
Tag
Merge
Rebase
Commit
Représente un changement
Possède un , plusieurs ou aucun commit parent
Est immutable – mais peut être modifié
Représenté par un Hash unique - 57a37d7d63147692dc959125e1f…
C1 C2
Branche
Représente une branche du graph
Pointe sur un commit
Sert de base à la collaboration
C1 C2
C3 C4
feat1
main
Tag
Représente un commit nommé
Est immutable
Utilisé pour définir des versions
C1 C2
C3 C4
feat1
main
v1.0.0
v1.0.1
Merge
Deux types : Fast Forward (ff) et 3-Way-Merge/recursive
Ramène une branche dans une autre
C1 C2
C3 C4
feat1
main
Merge – Fast Foward
Historique linéaire
Pas de conflit
C1 C2
C3 C4
feat1
main*
❯ git merge feat1
Updating
57a37d7..b667924
Fast-forward
Merge - Recursive
Historique non linéaire
Conflits possibles
Ajoute un commit de merge
❯ git merge feat1
Merge made by the
'recursive' strategy.
C1 C2
C3 C4
feat1
main*
CM
Merge - Recursive
cm possède deux parents
cm contient la résolution de conflits
au besoin
Commits de feat1 ajouté au dessus
de main
* commit cm (HEAD -> main)
| Merge: c2 c4
| |
| | Merge branch 'feat1’
| |
| * commit c4 (feat1)
| |
| * commit c3
| |
* | commit c2
|/
* commit c1
❯ git log --graph
Rejouer les commits précédents par rapport à une source
- Une branche
- Un commit
De manière interactive ou automatique
Peut être long et fastidieux
Garde un historique linaire vs un commit de merge
Rebase
Rebase – Synchroniser deux branches
c3 et c4 existent encore
Historique linéaire
Merge dans main linéaire
❯ git rebase main
Successfully rebased and
updated refs/heads/feat1.
C1 C2
C3 C4
feat1*
main
C3’ C4’
Merge ou Rebase pour synchroniser des branches ?
Dépend du contexte!
Merge Rebase
❌ Historique non linéaire ✅ Historique linéaire
✅ Résolution des conflits une seule fois ❌ Résolution des conflits pour chaque
commit de notre branche
✅ Plus rapide quand les deux branches
ont beaucoup de commits de différence
❌ Peut être très lent et compliqué
quand il y a beaucoup de commits d’écart
❌ L’historique de la branche de
destination ne doit pas être modifiée
Rebase – Nettoyer l’historique
Le titre du commit est à l’impératif
Commence par un verbe
Décrit le changement
Est court
- Mais peut posséder une description plus longue
Se termine sans ponctuation
Commence par une majuscule
Suit la convention de l’équipe / du projet
Commit – bonnes pratiques
Rebase – Nettoyer l’historique
Supprimer un commit
❯ git rebase -i c1
drop 0763ecd c2
pick 58ebee4 c3
C3’
C1
feat1
C3
C2
Rebase – Nettoyer l’historique
Regrouper des commits en un (squash)
❯ git rebase -i c1
pick 0763ecd c2
squash 58ebee4 c3
C3’
C1
feat1
C3
C2
Rebase – Nettoyer l’historique
Re-ordonner des commits
❯ git rebase -i c1
pick 58ebee4 c3
pick 0763ecd c2
C3’
C1
feat1
C3
C2 C2’
Modifier un commit
- Modifier le contenu
- Modifier le message
❯ git rebase -i c1
edit 0763ecd c2
pick 58ebee4 c3
Stopped at c2... c2
You can amend the commit now, with
git commit --amend '-S'
Once you are satisfied with your
changes, run
git rebase –continue
Rebase – Nettoyer l’historique
Dépend du contexte!
Merge ou Squash et Rebase pour ramener notre
travail dans la branche principale?
Squash & Rebase Merge
D’une branche de travail à une
branche principale
D’une branche principale à une autre
Rebase seulement quand les commits
sont propres et font du sens seul
Garder tous les commits de
l’historique
Garde un historique linéaire Évite les conflits lors d’un fix
Ramener les changements d’une branche dans une autre
Possibilité de valider (review) les changements
Possibilité d’automatisation (Continuous Integration)
Concept de Pull Request (PR)
Récupérer un commit d’une autre branche
Sauvegarder des changements sans créer un commit
Restaurer une branche modifiée (Rebase ou autre)
Cas pratiques
Récupérer un commit d’une autre branche
Cherry-pick
❯ git cherry-pick c5
⚠ Ne pas squasher le commit avec un autre commit
C1 C2
C3 C4
feat1*
main C5
feat2
C5’
Lors d’un pull, rebase ou autres opérations
Lors d’un changement de branche
Tester quelque chose
=> git stash
Sauvegarder des changements sans créer un commit
Sauvegarder localement
Un peu comme un commit
Peut en avoir plusieurs
Git stash
❯ git stash list
stash@{0}: WIP on dep: 68602dd8 fix dependency
for migration app
stash@{1}: WIP on subscriptions: 59dfad10 try
to bypass ubuntu mirror
stash@{2}: WIP on add-pagination: c8441181 WIP
stash@{3}: WIP on develop: bf3312f5 Add
simpleHealthcheckController
Git stash – commandes uPles
commit c786890cac7d1e91f66fbb81d69c34c98c382165 (refs/stash)
Merge: 68602dd8 ac26713a
Author: Julien Maitrehenry <julien@kumojin.com>
Date: Fri Apr 22 15:33:02 2022 -0400
WIP on dep: 68602dd8 fix dependency for migration app
.env | 13 ++++----
docker-compose.yml | 13 ++++++++
src/modules/datastore/datastore.service.ts | 44 +++++++++++---------------
src/services/activity.tracking.service.ts | 1 +
src/services/otp.service.ts | 40 +++++++++++------------
5 files changed, 58 insertions(+), 53 deletions(-)
❯ git show --stat stash@{0}
Git stash – commandes utiles
❯ git diff stash@{1}
❯ git stash pop
❯ git stash pop stash@{3}
❯ git stash drop
Restaurer une branche modifiée
Revenir en arrière sans rebase
C1 C2
C3 C4
feat1*
main
❯ git reset c3
Restaurer une branche modifiée
Annuler un rebase ❯ git reset c4
C1 C2
C3 C4
feat1*
main
C3’ C4’
Git reflog
Journal de toutes les opérations faites sur les références
Expire après 90 jours (default)
e01311c (HEAD -> feat1) HEAD@{0}: rebase (finish):
returning to refs/heads/feat1
e01311c (HEAD -> feat1) HEAD@{1}: rebase (pick): c4
bde4c72 HEAD@{2}: rebase (pick): c3
ffaf854 (main) HEAD@{3}: rebase (start): checkout main
c84f051 HEAD@{4}: commit: c4
a1b26cd HEAD@{5}: commit: c3
b9c944f HEAD@{6}: checkout: moving from main to feat1
ffaf854 (main) HEAD@{7}: commit: c2
b9c944f HEAD@{8}: checkout: moving from feat1 to main
b9c944f HEAD@{9}: checkout: moving from main to feat1
b9c944f HEAD@{10}: commit (initial): c1
❯ git reflog show
Restaurer une branche modifiée
e01311c (HEAD -> feat1) feat1@{0}: rebase
(finish): refs/heads/feat1 onto
ffaf8547c6fa92ee2dec5e5ebfd594d7dede70b5
c84f051 feat1@{1}: commit: c4
a1b26cd feat1@{2}: commit: c3
b9c944f feat1@{3}: branch: Created from HEAD
❯ git reflog show feat1
Dernière opération avant le rebase
Filtre les entrées
Restaurer une branche modifiée
Annuler un rebase ❯ git reset feat1@{1}
C1 C2
C3 C4
feat1*
main
C3’ C4’
Restaurer une branche modifiée
Mais j’ai fait un commit après mon rebase
C1 C2
C3 C4 feat1*
main
C3’ C4’ C5
Restaurer une branche modifiée
Pas de problème, on reflog, reset et cherry-pick !
2b749ef (HEAD -> feat1) feat1@{0}: commit: c5
5656daa feat1@{1}: rebase (finish):
refs/heads/feat1 onto
c34eabdb1707a7a26889ea01dff20187be8b41c0
e9c810d feat1@{2}: commit: c4
cdaf3fe feat1@{3}: commit: c3
❯ git reflog show feat1
❯ git reset feat1@{2}
Dernière opéra2on avant le rebase
Restaurer une branche modifiée
Pas de problème, on reflog, reset et cherry-pick !
e9c810d (HEAD -> feat1) feat1@{0}: reset:
moving to feat1@{2}
2b749ef feat1@{1}: commit: c5
❯ git reflog show feat1
❯ git cherry-pick feat1@{1}
Le commit manquant
L’un n’empêche pas l’autre
Librairie : toujours avoir un tag par version
> Suivre le semver (x.y.z)
> Les tags sont immutables
>> NE JAMAIS SUPPRIMER UN TAG ET LE RECRÉER AVEC LE MÊME NOM <<
Application : une branche de release simplifie la gestion des hotfixs
Branche de prod vs tag ?
Signer des commits (bonus)
QUESTIONS

Contenu connexe

Similaire à Comment maitriser git et produire de beaux commits

Drupalcamp Nantes - Présentation GIT
Drupalcamp Nantes - Présentation GITDrupalcamp Nantes - Présentation GIT
Drupalcamp Nantes - Présentation GITArtusamak
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueRossi Oddet
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdfbadrfathallah2
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versiongoldoraf
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfmouad55
 
Retour d'experience GIT, Integration continue
Retour d'experience GIT, Integration continueRetour d'experience GIT, Integration continue
Retour d'experience GIT, Integration continueMoïse Fiscal
 
Introduction à Git
Introduction à GitIntroduction à Git
Introduction à GitXavier Perez
 
REX - Passage de CVS à Git
REX - Passage de CVS à GitREX - Passage de CVS à Git
REX - Passage de CVS à GitPierre Templier
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Julien Garderon
 
Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienneSylvain Witmeyer
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...akramalidrissi1
 

Similaire à Comment maitriser git et produire de beaux commits (20)

Drupalcamp Nantes - Présentation GIT
Drupalcamp Nantes - Présentation GITDrupalcamp Nantes - Présentation GIT
Drupalcamp Nantes - Présentation GIT
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git
GitGit
Git
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Les bases de git
Les bases de gitLes bases de git
Les bases de git
 
Introduction à git
Introduction à gitIntroduction à git
Introduction à git
 
Retour d'experience GIT, Integration continue
Retour d'experience GIT, Integration continueRetour d'experience GIT, Integration continue
Retour d'experience GIT, Integration continue
 
Git flow
Git flowGit flow
Git flow
 
Introduction à Git
Introduction à GitIntroduction à Git
Introduction à Git
 
REX - Passage de CVS à Git
REX - Passage de CVS à GitREX - Passage de CVS à Git
REX - Passage de CVS à Git
 
Organiser son CI/CD - présentation
Organiser son CI/CD - présentation Organiser son CI/CD - présentation
Organiser son CI/CD - présentation
 
Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienne
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 

Plus de Julien Maitrehenry

Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Julien Maitrehenry
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetesJulien Maitrehenry
 
Global Azure Bootcamp Québec - Container on Azure
Global Azure Bootcamp Québec - Container on AzureGlobal Azure Bootcamp Québec - Container on Azure
Global Azure Bootcamp Québec - Container on AzureJulien Maitrehenry
 
Build a Docker Swarm cluster on Azure
Build a Docker Swarm cluster on Azure Build a Docker Swarm cluster on Azure
Build a Docker Swarm cluster on Azure Julien Maitrehenry
 
Retour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logRetour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logJulien Maitrehenry
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printempsJulien Maitrehenry
 
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbot
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbotSécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbot
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbotJulien Maitrehenry
 
Fullstack monitoring - Overview
Fullstack monitoring - OverviewFullstack monitoring - Overview
Fullstack monitoring - OverviewJulien Maitrehenry
 
Docker cluster with swarm, consul, registrator and consul-template
Docker cluster with swarm, consul, registrator and consul-templateDocker cluster with swarm, consul, registrator and consul-template
Docker cluster with swarm, consul, registrator and consul-templateJulien Maitrehenry
 

Plus de Julien Maitrehenry (12)

Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetes
 
Docker, but what it is?
Docker, but what it is?Docker, but what it is?
Docker, but what it is?
 
Global Azure Bootcamp Québec - Container on Azure
Global Azure Bootcamp Québec - Container on AzureGlobal Azure Bootcamp Québec - Container on Azure
Global Azure Bootcamp Québec - Container on Azure
 
Build a Docker Swarm cluster on Azure
Build a Docker Swarm cluster on Azure Build a Docker Swarm cluster on Azure
Build a Docker Swarm cluster on Azure
 
Retour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de logRetour d'expérience sur notre stack de log
Retour d'expérience sur notre stack de log
 
Docker, ça mange quoi au printemps
Docker, ça mange quoi au printempsDocker, ça mange quoi au printemps
Docker, ça mange quoi au printemps
 
Code, ship and run
Code, ship and runCode, ship and run
Code, ship and run
 
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbot
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbotSécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbot
Sécuriser Docker - Utilisation du CIS Docker 1.12 by @guytalbot
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Fullstack monitoring - Overview
Fullstack monitoring - OverviewFullstack monitoring - Overview
Fullstack monitoring - Overview
 
Docker cluster with swarm, consul, registrator and consul-template
Docker cluster with swarm, consul, registrator and consul-templateDocker cluster with swarm, consul, registrator and consul-template
Docker cluster with swarm, consul, registrator and consul-template
 

Comment maitriser git et produire de beaux commits

  • 1. Comment maîtriser Git et produire de beaux commits Parce que commiter c’est bien, mais quand c’est pratique, c’est mieux !
  • 2. Julien Maitrehenry Qui suis-je? Dev, DevOps, Cloud Architect, mentor Co-fondateur @Kumojin Kumojin.com Github.com/jmaitrehenry jmaitrehenry.ca
  • 3. Qu’est-ce que Git et Github ? Quelques cas d’usages sympas Branche de prod vs tag ? Signature de commit Lancer de tomates 🍅 (alias Q&A) AGENDA
  • 4. Qu’est-ce que Git? QU’EST-CE QUE git ? VCS – Version Control System De type graph Décentralisé Open Source
  • 5. Plateforme en ligne (SaaS) autour de Git Offre des outils, des automatisations, des intégrations, etc. Repo Git centralisé et géré
  • 6. Le vocabulaire de git Commit Branche Tag Merge Rebase
  • 7. Commit Représente un changement Possède un , plusieurs ou aucun commit parent Est immutable – mais peut être modifié Représenté par un Hash unique - 57a37d7d63147692dc959125e1f… C1 C2
  • 8. Branche Représente une branche du graph Pointe sur un commit Sert de base à la collaboration C1 C2 C3 C4 feat1 main
  • 9. Tag Représente un commit nommé Est immutable Utilisé pour définir des versions C1 C2 C3 C4 feat1 main v1.0.0 v1.0.1
  • 10. Merge Deux types : Fast Forward (ff) et 3-Way-Merge/recursive Ramène une branche dans une autre C1 C2 C3 C4 feat1 main
  • 11. Merge – Fast Foward Historique linéaire Pas de conflit C1 C2 C3 C4 feat1 main* ❯ git merge feat1 Updating 57a37d7..b667924 Fast-forward
  • 12. Merge - Recursive Historique non linéaire Conflits possibles Ajoute un commit de merge ❯ git merge feat1 Merge made by the 'recursive' strategy. C1 C2 C3 C4 feat1 main* CM
  • 13. Merge - Recursive cm possède deux parents cm contient la résolution de conflits au besoin Commits de feat1 ajouté au dessus de main * commit cm (HEAD -> main) | Merge: c2 c4 | | | | Merge branch 'feat1’ | | | * commit c4 (feat1) | | | * commit c3 | | * | commit c2 |/ * commit c1 ❯ git log --graph
  • 14. Rejouer les commits précédents par rapport à une source - Une branche - Un commit De manière interactive ou automatique Peut être long et fastidieux Garde un historique linaire vs un commit de merge Rebase
  • 15. Rebase – Synchroniser deux branches c3 et c4 existent encore Historique linéaire Merge dans main linéaire ❯ git rebase main Successfully rebased and updated refs/heads/feat1. C1 C2 C3 C4 feat1* main C3’ C4’
  • 16. Merge ou Rebase pour synchroniser des branches ? Dépend du contexte! Merge Rebase ❌ Historique non linéaire ✅ Historique linéaire ✅ Résolution des conflits une seule fois ❌ Résolution des conflits pour chaque commit de notre branche ✅ Plus rapide quand les deux branches ont beaucoup de commits de différence ❌ Peut être très lent et compliqué quand il y a beaucoup de commits d’écart ❌ L’historique de la branche de destination ne doit pas être modifiée
  • 17. Rebase – Nettoyer l’historique
  • 18. Le titre du commit est à l’impératif Commence par un verbe Décrit le changement Est court - Mais peut posséder une description plus longue Se termine sans ponctuation Commence par une majuscule Suit la convention de l’équipe / du projet Commit – bonnes pratiques
  • 19. Rebase – Nettoyer l’historique Supprimer un commit ❯ git rebase -i c1 drop 0763ecd c2 pick 58ebee4 c3 C3’ C1 feat1 C3 C2
  • 20. Rebase – Nettoyer l’historique Regrouper des commits en un (squash) ❯ git rebase -i c1 pick 0763ecd c2 squash 58ebee4 c3 C3’ C1 feat1 C3 C2
  • 21. Rebase – Nettoyer l’historique Re-ordonner des commits ❯ git rebase -i c1 pick 58ebee4 c3 pick 0763ecd c2 C3’ C1 feat1 C3 C2 C2’
  • 22. Modifier un commit - Modifier le contenu - Modifier le message ❯ git rebase -i c1 edit 0763ecd c2 pick 58ebee4 c3 Stopped at c2... c2 You can amend the commit now, with git commit --amend '-S' Once you are satisfied with your changes, run git rebase –continue Rebase – Nettoyer l’historique
  • 23. Dépend du contexte! Merge ou Squash et Rebase pour ramener notre travail dans la branche principale? Squash & Rebase Merge D’une branche de travail à une branche principale D’une branche principale à une autre Rebase seulement quand les commits sont propres et font du sens seul Garder tous les commits de l’historique Garde un historique linéaire Évite les conflits lors d’un fix
  • 24. Ramener les changements d’une branche dans une autre Possibilité de valider (review) les changements Possibilité d’automatisation (Continuous Integration) Concept de Pull Request (PR)
  • 25.
  • 26. Récupérer un commit d’une autre branche Sauvegarder des changements sans créer un commit Restaurer une branche modifiée (Rebase ou autre) Cas pratiques
  • 27. Récupérer un commit d’une autre branche Cherry-pick ❯ git cherry-pick c5 ⚠ Ne pas squasher le commit avec un autre commit C1 C2 C3 C4 feat1* main C5 feat2 C5’
  • 28. Lors d’un pull, rebase ou autres opérations Lors d’un changement de branche Tester quelque chose => git stash Sauvegarder des changements sans créer un commit
  • 29. Sauvegarder localement Un peu comme un commit Peut en avoir plusieurs Git stash ❯ git stash list stash@{0}: WIP on dep: 68602dd8 fix dependency for migration app stash@{1}: WIP on subscriptions: 59dfad10 try to bypass ubuntu mirror stash@{2}: WIP on add-pagination: c8441181 WIP stash@{3}: WIP on develop: bf3312f5 Add simpleHealthcheckController
  • 30. Git stash – commandes uPles commit c786890cac7d1e91f66fbb81d69c34c98c382165 (refs/stash) Merge: 68602dd8 ac26713a Author: Julien Maitrehenry <julien@kumojin.com> Date: Fri Apr 22 15:33:02 2022 -0400 WIP on dep: 68602dd8 fix dependency for migration app .env | 13 ++++---- docker-compose.yml | 13 ++++++++ src/modules/datastore/datastore.service.ts | 44 +++++++++++--------------- src/services/activity.tracking.service.ts | 1 + src/services/otp.service.ts | 40 +++++++++++------------ 5 files changed, 58 insertions(+), 53 deletions(-) ❯ git show --stat stash@{0}
  • 31. Git stash – commandes utiles ❯ git diff stash@{1} ❯ git stash pop ❯ git stash pop stash@{3} ❯ git stash drop
  • 32. Restaurer une branche modifiée Revenir en arrière sans rebase C1 C2 C3 C4 feat1* main ❯ git reset c3
  • 33. Restaurer une branche modifiée Annuler un rebase ❯ git reset c4 C1 C2 C3 C4 feat1* main C3’ C4’
  • 34. Git reflog Journal de toutes les opérations faites sur les références Expire après 90 jours (default)
  • 35. e01311c (HEAD -> feat1) HEAD@{0}: rebase (finish): returning to refs/heads/feat1 e01311c (HEAD -> feat1) HEAD@{1}: rebase (pick): c4 bde4c72 HEAD@{2}: rebase (pick): c3 ffaf854 (main) HEAD@{3}: rebase (start): checkout main c84f051 HEAD@{4}: commit: c4 a1b26cd HEAD@{5}: commit: c3 b9c944f HEAD@{6}: checkout: moving from main to feat1 ffaf854 (main) HEAD@{7}: commit: c2 b9c944f HEAD@{8}: checkout: moving from feat1 to main b9c944f HEAD@{9}: checkout: moving from main to feat1 b9c944f HEAD@{10}: commit (initial): c1 ❯ git reflog show
  • 36. Restaurer une branche modifiée e01311c (HEAD -> feat1) feat1@{0}: rebase (finish): refs/heads/feat1 onto ffaf8547c6fa92ee2dec5e5ebfd594d7dede70b5 c84f051 feat1@{1}: commit: c4 a1b26cd feat1@{2}: commit: c3 b9c944f feat1@{3}: branch: Created from HEAD ❯ git reflog show feat1 Dernière opération avant le rebase Filtre les entrées
  • 37. Restaurer une branche modifiée Annuler un rebase ❯ git reset feat1@{1} C1 C2 C3 C4 feat1* main C3’ C4’
  • 38. Restaurer une branche modifiée Mais j’ai fait un commit après mon rebase C1 C2 C3 C4 feat1* main C3’ C4’ C5
  • 39. Restaurer une branche modifiée Pas de problème, on reflog, reset et cherry-pick ! 2b749ef (HEAD -> feat1) feat1@{0}: commit: c5 5656daa feat1@{1}: rebase (finish): refs/heads/feat1 onto c34eabdb1707a7a26889ea01dff20187be8b41c0 e9c810d feat1@{2}: commit: c4 cdaf3fe feat1@{3}: commit: c3 ❯ git reflog show feat1 ❯ git reset feat1@{2} Dernière opéra2on avant le rebase
  • 40. Restaurer une branche modifiée Pas de problème, on reflog, reset et cherry-pick ! e9c810d (HEAD -> feat1) feat1@{0}: reset: moving to feat1@{2} 2b749ef feat1@{1}: commit: c5 ❯ git reflog show feat1 ❯ git cherry-pick feat1@{1} Le commit manquant
  • 41. L’un n’empêche pas l’autre Librairie : toujours avoir un tag par version > Suivre le semver (x.y.z) > Les tags sont immutables >> NE JAMAIS SUPPRIMER UN TAG ET LE RECRÉER AVEC LE MÊME NOM << Application : une branche de release simplifie la gestion des hotfixs Branche de prod vs tag ?