![Couverture GIT Commandes De Base](https://i.imgur.com/Eul9dCG.png) # Git - Commandes De Base ## Initialisation - Démarer le projet git - `git init` : Initialiser un nouveau dépôt Git. Jusqu’à ce que vous exécutiez cette commande dans un dépôt ou répertoire, c’est juste un dossier ordinaire. Seulement après avoir entré cette commande, il accepte les commandes git qui suivent. ## Configuration - `git config -l` : Lire le contenu de la configuration - `git config` : Configurer _Git_, ceci est tout particulièrement utile quand vous paramétrez _Git_ pour la première fois. - `git config --global user.name "<user-name>"` - `git config --global user.email "<contact@gmail.com>"` :::info <i class="fa fa-info-circle" aria-hidden="true"></i> `--global` définie la configuration de manière globale. Vous ne serez pas obligé de configurer chaque dépôt séparément. ::: - `git remote add origin <url>` : Indiquer le répertoire `git` a utiliser sur le serveur github (utiliser la méthode ssh -> public key) - `git push --set-upstream origin master` : Permettre de téléverser le répertoire local vers le répertoire git sur le serveur - `git submodule add <host>` : Ajouter un projet externe dans le projet principal - `.gitignore` : Lister les fichiers ou dossiers à ignorer (important pour les mots de passe) ## Tester la connexion - `git ls-remote` ## Indexation - `git status` : Vérifier le statut de votre repository. Voir quels fichiers sont à l’intérieur, quelles sont les modifications à commiter, et sur quelle branche du repository vous êtes en train de travailler - `git add <nomDeFichier>` : Ajouter les fichiers et modifications à l'index - `git add .` : Ajouter tous les fichiers - `git rm --cached <fichier>` ou `git reset <fichier>` : Supprimer les modifications de l'index - `git commmit -m "<message>"` : Créer un commit - `git diff HEAD^ HEAD` : Adficche la différence entre les 2 derniers commits - `git commit -am "<message>"` : Combine les deux opérations précédentes :::success :::spoiler Conseil pour réaliser un bon message de commit ... - Un sujet - Une ligne blanche - Une description - Ne pas hésiter à créer un commit même pour une modification mineure ::: - `git diff <fichier>` : Afficher la différence entre le dernier commit et les nouvelles modifications (à faire avant `git add`) - sinon `git diff ---cached <fichier>` ```mermaid graph LR modif( Modification fa:fa-floppy-o ) -.-> diff(git diff) diff -.-> add(Git add .) add -.-> diffC(git diff --cached) ``` :::info <i class="fa fa-info-circle" aria-hidden="true"></i> HEAD est un tag indiquant le commit sur lequel on se situe ::: ### Indexer de manière provisoire - `git stash save "message"` : Mettre de côté les modifications ```mermaid graph LR v1(Modification Version 3) -.-> |ERREUR|check(git checkout version 2) v1 --> stash("git stash save message") stash --> |OK|check ``` - `git stash list` : Affiche les stashs - `git stash show <stash-ID>` : Affiche plus d'informations sur le stash - `git stash pop <stash-ID>` : Reintègre les modifications (avant commit) - `git stash apply` : rec avant commit <!-- - (git mergetool vimdiff) --> ## Historique des commits - `git log` : afficher la liste de tous les commits que vous avez réalisés - `git log --online` : Afficher seulement l'entête des commits - `git log -n 2` : Afficher les 2 derniers commits - `git log <nomDeLabranche>` - `git log -a` : Afficher tous les commits après avoir fait `git fetch` - `git show <SHADuCommit> | <tag>` : Afficher un commit précis (même affichage que git diff) - `git checkout <sha-1> | <tag>` : Se placer sur un commit, `git checkout master` pour revenir ## Branches et Tags - `git branch` : Voir les branches - `git branch <nomDeLaBranche>` : Créer une nouvelle branche - `git branch -d <nomDeLabranche>` : Supprimer la branche locale - `git push origin --delete <nomDeLabranche>` : Supprimer la branche sur le dépôt distant - `git branch -a` : Afficher toutes les branches locales et distantes - `git checkout <nomDeLaBranche>` : Sélectionner une autre branche - `git checkout -b <nomDeLaBranche>` : Créer une branche et se placer dessus - `git tag` : Afficher la liste de tous les tags - `git tag <tag-name>` : Attribuer un tag au commit - `git tag --delete <tag-name>` : Supprimer le nom du tag - `git push --tags` : Mettre à jour les tags sur le dépôt distant - `git blame <fichier>` : Afficher toutes les modifications d'un fichier ## Gérer les dépôts distants - `git commit --amend -m "<nouveau message>"` : Modifier le message du derniers commit - `git remote -v` : affiche la liste des distants - `git remote add` : cloner le dossier sur le serveur (utiliser la méthode ssh -> public key) - `git clone <host>...` : importer le dossier repository ## Publier les commits sur un dépot distant - `git push [origin master]` : Mettre en ligne les commits - `git push --tag` : Publier les commits de tous les tags (Release) - `git push --all` : Publier les commits de toutes les branches - `git push -f` : Forcer la publication des commits - `git pull` : Mettre a jour la version locale (Réalise un merge si il y a conflit) - `git merge --abort` : Annuler `git pull` si il y a conflit - `git pull --rebase` : Mettre a jour la version locale Résoudre le conflit, faire un commit puis `git rebase --skip` - `git fetch` : cette commande s'adresse au dépôt distant et récupère toutes les données de ce projet que vous ne possédez pas encore - `git diff HEAD...origin/master` : cette commande produit une différence entre le sommet de 2 banches. Si vous préférez trouver la différence de leur ancêtre commun, vous pouvez utiliser 3 points au lieu de 2 - `git diff master...test` ## Récuprer un commit - `git cherry-pick <SHADuCommit>` : Replacer un commit d'une branche à une autre ## Merge et Rebase - `git checkout <branche A>` puis `git merge <branche B>` : Fusionne la branche A et B dans A - Pour avoir un travail mieux organisé (plus propre) ```mermaid graph LR A(branche master) -->|git checkout branche-B| B(branche-B) B -->|git rebase master| B B --> |git checkout master| A A --> |git merge branche-B| A ``` ## Annuler un commit - `git commit --amend` : Ajouter des changements au derniers commmit - `git reset` : Annuler l'indexation - `git reset [--soft] <fichier>|<commit-(c-1)>` : Annuler un commit mais garder les changements - `git reset [--hard] <fichier>|<commit-(c-1)>` : Annuler un commit mais sans garder les changements :::warning L'annulation fait qu'on se repositionne sur un commit antérieur ::: - `git revert <SHADuCommit>` : Annuler ou Créer un commit inverse réf[^1] ## Effectuer une recherche par mot clé dans les commit - `git log --grep <expression>` [Suivre ce lien pour plus de détail](https://www.gun.io/blog/git-search-log) ## Aide - `git help` : Oublié une commande ? Tapez-ça dans la ligne de commande pour afficher les 21 commandes les plus courantes de Git. Vous pouvez aussi être plus spécifique et saisir “git help init” ou tout autre terme pour voir comment utiliser et configurer une commande spécifique git ## Avant de réaliser un "git pull" 1. `git fetch` 2. `git log HEAD..origin/master` 3. `git log -p HEAD..origin/master` 4. `git diff HEAD...origin/master` --- ## Submodule git ### Ajouter un sous dépot git avec "submodule" ```bash git submodule add <host> <path/to/dir> ``` ### Réaliser un "git pull" pour un "submodule" La première fois, on peut extraire tous les sous-modules en utilisant ```bash git submodule update --init --recursive ``` Pour mettre à jour les sous-modules, on peut faire ```bash git submodule update --recursive --remote ``` ### Supprimer un sous-module, vous devez: 1. Supprimez la section appropriée du fichier .gitmodules. 1. Exécutez la commande `git add .gitmodules` pour mettre à jour les changements. 1. Supprimez la section appropriée dans `.git/config`. 1. Exécutez la commande `git rm --cached path_to_submodule` (aucune barre oblique finale). 1. Exécutez la commande `rm -rf .git/modules/path_to_submodule` (pas de barre oblique finale). 1. Exécutez la commande `git commit -m "Sous-module supprimé"`. 1. Supprimer les fichiers de sous-module maintenant non suivis `rm -rf path_to_submodule`. > réf : [https://gist.github.com/myusuf3/7f645819ded92bda6677](https://gist.github.com/myusuf3/7f645819ded92bda6677) [^1]: Explications supplémentaires : [https://stackoverflow.com/questions/5798930/git-rm-cached-x-vs-git-reset-head-x](https://stackoverflow.com/questions/5798930/git-rm-cached-x-vs-git-reset-head-x) {%hackmd @alternative-rvb/contact %}