:PROPERTIES: :ID: e93719b3-088d-4fe7-9ef8-fc9a4fd84827 :mtime: 20220524205131 :ctime: 20220501191904 :END: #+title: Git * Introduction * Outil de gestion de versions, * Créé par L. TORVALDS, * Fonctionnement décentralisé. * Commandes | Commande | Action | |----------------+--------------------------------------------------------------------------------------------------------------------------------------------------| | ~git init~ | Crée un nouveau dépôt | | ~git clone​~ | Clone un dépôt distant | | ~git add​~ | Ajoute de nouveaux /blobs/ dans la base des objets pour chaque fichier modifié depuis le dernier commit. Les objets précédents restent inchangés | | ~git commit~ | Intègre la somme de contrôle SHA-1 d'un /tree/ et les sommes de contrôle des /commits/ parents pour créer un nouvel /commit/ | | ~git branch~ | ​Liste les branches | | ~git merge~ | ​Fusionne une branche dans une autre | | ~git rebase~ | ​Déplace les /commits/ de la branche courante devant les nouveaux /commits/ d’une autre branche | | ~git log​~ | Affiche la liste des commits effectués sur une branche | | ~git push~ | Publie les nouvelles révisions sur le remote | | ~git pull~ | ​Récupère les dernières modifications distantes du projet (depuis le Remote) et les fusionne dans la branche courante | | ~git stash~ | ​Stocke de côté un état non commité afin d’effectuer d’autres tâches | | ~git checkout~ | ​Annule les modifications effectuées, déplacement sur une référence (branche, hash) | | ~git switch~ | ​Changement de branche | | ~git remote~ | ​Gestion des remotes | Pour positionner ~HEAD~ : * Au commit père : ~git checkout HEAD^~ ou ~git checkout HEAD~1~, * En cas de plusieurs pères : ~git checkout HEAD^2~ pour positionner au second père, * Au commit grand-père : ~git checkout HEAD^^~ ou ~git checkout HEAD~2~ ~HEAD~ est /detached/ lorsqu'un /checkout/ est effectué sur un /commit/ et non pas une /branch/. Pour forcer le déplacement d'une branche : ~git branch -f ~. Pour retourner en arrière : * Branche locale : ~git reset ~ (position où nous souhaitons être). * Différentes options : * ~--soft~ : le commit sera supprimé mais les changements seront conservés et /stashed/, * ~--mixed~ (par défaut) : le commit sera supprimé mais les changements seront conservés et /unstashed/, * ~--hard ~ pour les changements à ne pas conserver. * Branche distante (/remote/) : ~git revert ~ : * Création d'un nouveau /commit/ qui inversera les modifications apportées par le ~~, * Conservation de l'historique, * Pour supprimer plusieurs /commit/ consécutifs : ~git revert ..~ (~~~ exclu, ~~ inclus). Pour copier une série de commits après l'emplacement actuel (/HEAD/) : ~git cherry-pick <...>~ *Rebase* interractif (~git rebase -i~) permet de : * Réarranger les /commits/, * Omettre certains /commits/ (/pick/), * Ecraser des /commits/. Pour modifier le dernier commit : ~git commit --amend~. Pour décrire (/describe/) les changements entre /HEAD/ et le tag le plus récent : ~git describe~ (~git describe ~ sinon). Pour mettre à jour une branche distante : ~git fetch~ : * Télécharge les /commits/ que le dépôt distant possède mais qui ne sont pas dans le notre, puis, * Met à jour nos branches distantes (par exemple, origin/main), * Ne met par à jour nos branches locales (par exemple, main), Pour rapatrier (/fetch/) les branches distantes et les fusionner (/merge/) : ~git pull~. Pour rapatrier (/fetch/) les branches distantes et /rebase/ : ~git pull --rebase~ Pour créer une branche afin que celle-ci suive une distante : * Création d'une nouvelle branche : ~git checkout -b ;git pull~, * La branche existe déjà : ~git branch -u ~ * Outils tiers ** Visualisation *** [[https://github.com/dandavison/delta][Delta]] Affichage de ~git diff~. *** [[https://github.com/darrenburns/dunk][Dunk]] Affichage de ~git diff~. * Apprentissage ** [[https://github.com/benthayer/git-gud][Git-gud]] Jeu en ligne de commande permettant d'apprendre l'usage de Git. ** [[https://learngitbranching.js.org/][learngitbranching.js.org]] Site permettant l'apprentissage de l'usage de Git. * Références *