C'est une mise en situation d'un vrai projet git, pour t'aider à te familiariser avec git.
La branche de main
correspond à celle de production (qui sera déployée sur le
site principal par exemple netflix.com, facebook.com, etc.) et on est parti de
main
pour créer nos branches features
. 6 branches features ont été créées et
elles contiennent chacune des commits spécifiques au développement de nouvelles
fonctionnalités qu'on s'est dispatché entre devs, dans un board Jira/Trello.
- titi/feat/53/add-react-router
- tony/feat/54/install-tailwind-css
- antho/refactor/55/remove-homepage-wording
- remy/fix/60/change-h1-to-p
- titi/chore/56/add-gitignore
- kahn/feat/40/create-about-component
- Exercices
- Extras
-
Cloner ce projet
-
Lancer
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
pour récupérer toutes les branches features qui sont sur origin -
Lancer
git remote remove origin
pour unlink origin du repo Github où t'as récupéré le projet -
Créer un repo Github/Gitlab
-
Push ce projet cloné dans ton nouveau repo Github/Gitlab
-
Lancer cette commande dans le terminal
git push --all origin
(pour push toutes les autres branches features que t'as en local)
Il faut faire les exercices/étapes dans l'ordre (de 1 à 6). Ne pas hésiter à regarder "git graph" avant/après chaque action git et avant/après avoir mergé les PRs sur Github. Et surtout ne pas rester bloquer, rechercher en ligne c'est pas tricher, au contraire, surtout quand tu apprends. Le plus important c'est de comprendre ce qu'il se passe et ce que tu fais.
- Ouvrir une PR pour merger la branche
titi/chore/56/add-gitignore
dansmain
- Aller dans l'onglet "Files changed" de la PR ouverte
- Mettre un commentaire à la ligne 2 et écrire : "Kahn: Ah oui bien pensé
j'avais oublié ce sale fichier
.DS_Store
!" - Cliquer sur la proposition "Squash and merge" et merger la PR
- Ouvrir git graph, faire un
git fetch
, observer le changement, checkout versmain
et faire ungit pull origin main
- Expliquer ce qu'il s'est passé
- Ouvrir une PR pour merger la branche
tony/feat/54/install-tailwind-css
dansmain
- Aller dans l'onglet "Files changed" de la PR ouverte
- Mettre un commentaire à la ligne 4 en verte et écrire : "Je pense que la
taille de police dans notre maquette correspond plutôt à
text-8xl
" - Checkout vers la branche
tony/feat/54/install-tailwind-css
en local - Faire le changement et push le changement
- Aller dans l'onglet "Files changed" de la PR ouverte
- Voir ce que le commentaire de la PR est devenu
- Cliquer sur la proposition "Squash and merge" et merger la PR
- Ouvrir git graph, faire un
git fetch
, observer le changement, checkout versmain
et faire ungit pull origin main
- Expliquer ce qu'il s'est passé
- Ouvrir une PR pour merger la branche
antho/refactor/55/remove-homepage-wording
dansmain
- Régler le conflit depuis Github
- Cliquer sur la proposition "Squash and merge" et merger la PR
- Ouvrir git graph, dans les icônes en haut à droite, cliquer sur le nuage (git
fetch), observer le changement, checkout vers
main
et faire ungit pull origin main
- Expliquer ce qu'il s'est passé
- Ouvrir une PR pour merger la branche
titi/feat/53/add-react-router
dansmain
- Checkout vers la branche
titi/feat/53/add-react-router
en local - Régler le conflit en local (je t'expliquerai la manière pour s'y prendre)
- Push les changements
- Cliquer sur la proposition "Squash and merge" et merger la PR
- Ouvrir git graph, dans les icônes en haut à droite, cliquer sur le nuage (git
fetch), observer le changement, checkout vers
main
et faire ungit pull origin main
- Expliquer ce qu'il s'est passé
- Merger la branche
remy/fix/60/change-h1-to-p
dansmain
avec le process de l'ouverture d'une PR
- Merger la branche
kahn/feat/40/create-about-component
dansmain
en local
(repartir de zéro en supprimant le projet et le recloner)
- Créer une branche et développer une feature (par exemple créer un composant X ou installer la librairie Y ou fixer un faux bug...)
- Arriver à merger la branche feature en passant par le process d'ouvrir une PR, etc.
- Créer une branche de sous-feature en la tirant de
tony/feat/54/install-tailwind-css
- Faire un changement (installer une librairie complémentaire à tailwind, modifier un className, etc.)
- Ouvrir une PR, la valider et merger la nouvelle branche dans
tony/feat/54/install-tailwind-css
- Ouvrir une nouvelle PR, la valider et merger la nouvelle branche dans
main
- Expliquer ce qu'il s'est passé
- Refaire tous les exercices mais cette fois ci, ouvrir les 6 PR en même temps et les merger seulement sur Github
- Ouvrir git graph mais ne rien toucher, juste regarder l'état du graph
- Fetch les changements en ligne
- Expliquer ce qui a changé
- Checkout sur
main
- Faire un
git pull
- Expliquer ce qui a changé
- Quelle est la différence entre les branches
origin/main
etmain
?
- Refaire l'extra 3 mais ne pas git fetch, checkout sur
main
etgit pull
directement - Déduire la différence entre
git fetch
etgit pull
- Refaire tous les exercices mais cette fois ci, rebase avant chaque exercice
(sauf le premier) : il faut checkout sur la branche feature en question et
lancer
git rebase main
- Expliquer ce qui change lorsqu'on rebase les branches features après chaque
changement sur
main
- (Analogie de la voiture garée + mouvements de personnes)
- Refaire l'extra 5 mais cette fois ci, merge avant chaque exercice (sauf le
premier) il faut checkout sur
main
puis lancergit merge
+ le nom de la branche que tu veux viser - Décrire à quoi ressemble le graph avec les merges
- Aller sur le repo Github, choisir un de tes branches features, cliquer sur
X commits
et regarder tous les commits de cette branche qui a utiliségit merge
- Déduire la différence entre
git rebase
etgit merge
- Essayer de s'imaginer ce que serait une bonne PR
- Trouver la différence entre
Create a merge commit
,Squash and merge
,Rebase and merge
pour merger une PR
- Refaire l'extra 3 mais cette fois ci, et à la fin, avant de git pull, sur la
branche
main
, faire 4 commits qui modifieront à chaque fois les fichiersApp.js
etpackages.txt
- Tenter un
git pull
- Expliquer ce qu'il s'est passé
- Refaire l'extra 6 mais cette fois ci, avant de git pull, lancer la commande
git pull --rebase=i
- Expliquer ce qui a changé par rapport à l'extra 6
- Depuis la branche
main
, amend un changement dans le dernier commit et comparer le nouveau le graph qui s'affiche - Expliquer ce qui a changé
- Refaire l'extra 8 et en plus,
git rebase -i main
- En déduire ce que fait la commande
git rebase -i main
- Quelle est la différence entre
git rebase -i HEAD~2
etgit rebase -i main
- Répliquer ce mini projet git avec 1 branche main et 4 branches features pour pouvoir refaire les mêmes process de PR. Tu peux le faire en partant d'un projet Create-React-App
- Checkout vers la branche
main
- Faire un changement à la ligne 1 de
packages.txt
- Lancer
git commit -a --fixup e74a6181844a3c9d3235059369f853cb7336691f
- Lancer
git rebase -i --autosquash --root
et confirmer - Ouvrir git graph bien regarder le graph et expliquer ce qui se passe
- Tenter de rebase n'importe qu'elle branche vers
main
et expliquer ce qui se passe - Annuler le rebase avec
git rebase --abort
- Lancer
git rebase -i main