https://www.atlassian.com/git/tutorials/saving-changes/gitignore
https://www.pierre-giraud.com/git-github-apprendre-cours/

https://learngitbranching.js.org/?locale=fr_FR


** INITIER UN DEPOT GIT **
mkdir <projet>
cd <projet>
git init

** EVOLUTION **
git add
git mv <fichier> <newfichier>
git rm
git status

** REVENIR A LA VERSION DU DERNIER COMMIT **
git reset HEAD <fichier>

** COMMIT **
git commit -m "info du commit"     -- Ne pas oublier de faire des git add sur toutes les modifs
git commit -a    -- Pour ajouter automatiquement tous les fichiers modifiés sans git add
git commit --amend

** CLONE & REFRESH **
git clone
git fetch         -- Refresh uniquement
git pull          -- Merge le refresh de l'origin avec mes modifs en local

** BRANCHES **
git branch <nombranche>       -- Creer la branche
git checkout <nombranche>     -- Aller a la branche
git merge <branch>            -- Fusionne la branche dans la branche courante (à faire avant : git co master)
? récupérer les dernieres modifs d'une autre branche dans ma branche actuelle ?

** TAG **
git tag maVersion1 <commit-id>

** INFOS **
git log

** TRAVAIL A DISTANCE **
git clone <git distant> <repertoire local>     -- Récupérer le git distant en local
git push / git push origin master              -- Transfert les modifs au git distant
git pull / git pull origin master              -- Recupere les modifs du git distant



** SPECIFIQUE : DEBUG **
1. créer branche de debug : git branch debut; git checkout debug
2. ajouter plein de "printf", commit -m "debug: printf" : git commit
3. debuguer, commit : git commit -m "debug: fix"
4. publier uniquement le "commit fix" dans la branche master : git co master; git cherry-pick <commit-id ou from-commit-id to-commit-id>





** Infos d'utilisation des branches **

Si tu fais une branche pour une évolution, dans ce cas là tu as 2 possibilités :
- Tu fais un merge dans ta branche principale, donc tu garde ta branche d'evolution avec tous ces commit dessus
- Tu fais un rebase dynamique en sélectionnant 1 commit en "Pick" et tous les autres commits de la branche évolution en "squash". Ca va donc te créer un seul nouveau commit dans ta branche principale qui est un condensé de ta branche d'évolution. Ta branche évolution n'est donc plus utile et tu peux la supprimer.

La bonne pratique c'est :
- si tu fais un merge d'une branche dans l'autre ça veut dire que tu veux garder les 2 branches pour de l'historique
- si tu fais du rebase tu veux juste alléger ton historique et donc ne plus avoir ta branche d'évolution