Mémo sur l'utilisation de git
Ici, juste un article me permettant de garder mémoire des commandes utiles (pour moi) sur git. Je n'utilise que peu git et cet outil permet tellement de choses qu'il est parfois complexe de s'y retrouver.
En local
Initier le projet
On se place dans le dossier que l'on veut "giter" :
git init # initie un dépôt vide et créé les fichiers nécessaires
git add --all # ajoute tous les fichiers du dossier dans l'index du dépôt
git commit -m "test" # enregistre les changements dans le dépôt. L'option -m ajoute un message (explication des modif. par exemple)
Ignorer des fichiers
Il existe différentes méthodes pour ignorer des fichiers. La plus simple et la plus connue reste l'utilisation du fichier .gitignore placé à la racine du dépôt.
On y ajoute ensuite les fichiers/dossiers qu'on veut ignorer. Cela peut être des noms de fichiers, de dossiers, des chemins, on peut utiliser aussi l'étoile.
Si on souhaite supprimer des fichiers qu'on a publié et qu'on ajoute au .gitignore :
L'option --cached indique à git de ne pas supprimer le fichier de l'arborescence de travail mais seulement de le supprimer de l'index. Avec un dossier, de manière récursive, on ajoute l'option -r :
On peut faire un check avec l'option -n
Gestion des branches
Pour créer une nouvelle branche :
Pour lister les branches :
Pour supprimer une branche :
Pour renommer une branche :
Pour basculer sur une branche :
Le remisage (git stash)
Les différentes commandes git stash
La commande git stash permet de remiser ("mettre de côté") des développements pour faire une petite modification et la "commiter" avant de reprendre ces développements mais sans les avoir commités. On peut en effet voir avec la commande git status après un git stash qu'il n'y a plus de modification à commiter.
La commande suivante permet de vérifier ce qui est remisé :
Pour être plus précis et commenter ce qu'on a remisé :
Pour avoir des détails sur une remise :
Encore plus de détails :
Tip
Il est possible de faire plusieurs stash
Pour reprendre le travail remisé et l'appliquer au commit courant :
ou pour spécifier le stash si on en a plusieurs :
Warning
Les modifications remisées le sont toujours après la commande précédente même si elles ont été importées dans le commit courant. Pour les supprimer :
On peut également tout faire en une commande (apply + drop) avec la commande :Par défaut, git stash ne prend pas en compte les nouveaux fichiers. Pour les prendre en compte :
Exemple de mise en pratique
Prenons un exemple qui m'est arrivé. J'ai une branche main, en prod et publiée sur GitHub, avec un fichier index.html. Pour faire de nouveaux développements, je créé une branche dev. Je fais des développements sans connaitre la fonction git stash :
- Je fais des modifications dans index.html
- Je créé un fichier style.css
- Je créé un fichier background.png
Je voudrais commiter puis publier les modifications d'index.html dans la branche main car j'ai corrigé une erreur mais sans commiter le reste.
C'est parti !
git restore --staged style.css background.png # à faire seulement si ils sont indexés, on peut le vérifier avec git status
git commit -m "modification d'index.html" # pour commiter ma modification d'index.html
git add --all # pour indexer mes fichiers avant des les remiser
git stash save nouveaux fichiers # pour remiser mes deux nouveaux fichiers avant de changer de branche
git checkout main # pour rebasculer sur la branche main
git merge dev # pour intégrer les modifications d'index.html présentes dans la branche dev dans la branche main
git checkout dev # pour retourner sur la branche dev
git stash apply # pour récupérer mes deux fichiers remisés
git stash drop # pour supprimer mon stash
git add --all # pour réindexer ces fichiers
La commande git log
La commande git log permet de voir l'historique des commit. La plus courante, renvoit une liste de commits, avec leurs identifiants :
Quelques options complémentaires utiles :
- --name-status liste les fichiers créés, modifiés ou supprimés pour chaque commit
- -n 2 ou -2 ou --max-count=2 limite le nombre de commits affichés à 2
- --skip=3 n'affichera pas les 3 derniers commits
- --berfore=MM/JJ/AAAA limite aux commits avant la date donnée (attention au format)
- --after=MM/JJ/AAAA limite aux commits après la date donnée
La commande git reset
Warning
La commande git reset va affecter l'historique en supprimant des commits !
La commande git reset permet de revenir en arrière sur les commits. Tout d'abord, il faut connaitre l'identifiant du commit voulu (voir ci-dessus la commande git log).
Ensuite la commande de base, va permettre de revenir en arrière en supprimant les commits suivants mais en conservant la modification des fichiers. Les fichiers seront alors en statut non stagé :
Il existe plusieurs modes de fonctionnement de la commande git reset, j'en présente 3 ici :
- --mixed [valeur par défaut] se comporte comme décrit ci-dessus.
- --soft se comporte comme ci-dessus sauf que les fichiers seront stagged
- --hard ne conserve pas la modification des fichiers. ⚠️ Attention !
Dépôt distant
Paramétrer les connexion au dépôt distant
Il est aussi possible de passer directement via CLI sans token mais cela nécessite l'installation de GitHub qui n'est pas dans les dépôts officiels de Debian ou autres distributions. Je trouve les méthodes via token et SSH bien mieux.
Via HTTPS (Via un token)
Pour générer un token, il faut se rendre sur son compte GitHub, cliquer sur son image en haut à droite puis Settings. Cliquer ensuite tout en bas à gauche sur Developer settings puis Personnal access tokens et Tokens (classic). Cliquer ensuite sur Generate new token puis Generate new token (classic).
Dans cette fenêtre, on peut paramétrer les accès et la date d'expiration du token. Une fois rempli, cliquer en bas sur Generate token.
La clé est générée et affichée. Elle sert de mot de passe à la place du mot de passe utilisateur dans la commande git push (voir plus bas dans l'article)
Warning
Attention à bien copier cette clé car on ne peut pas la retrouver ensuite
Avec une clé SSH
Pour cela, il est nécessaire :
- d'avoir une paire de clé (privée/publique)
- de déposer sa clé publique sur son compte github
- d'activer ssh-agent sur son poste local
Générer sa paire de clé
Pour cela, plein de tutos existent. Sinon, un petit tour sur mon article Ansible et c'est décrit.
Déposer sa clé sur son compte github
Pour cela, c'est très simple, on se rend sur compte Github, puis on clique sur l'icone en haut à droite puis settings. On va ensuite à gauche dans le menu SSH and GPG keys avant de cliquer sur le bouton vert "New SSH Key".
On peut ensuite faire un copier/coller du texte contenu dans le fichier de clé publique (fichier.pub).
Warning
Attention à ne pas copier le contenu de sa clé privée !
Activer le ssh-agent
Il faut ensuite activer ssh-agent sur le poste local avec la commande suivante :
puis ajouter sa clé à l'agent ssh :
Note
Si vous avez entrer une passphrase sur la clé (ce qui est fortement recommandé), elle sera demandée ici
On peut ensuite tester la connexion à github avec la commande suivante :
ssh -T [email protected]
après avoir validé l'empreinte, vous devriez avoir un beau message de confirmation !
Quelques commandes relatives aux dépôts distants
Pour ajouter un dépôt distant (dans lequel on publiera les fichiers) :
permet d'ajouter le dépôt distant défini par son url.
Warning
Cette URL peut varier en fonction de la méthode de publication : - Via un token, l'url est de la forme https://github.com/username/repository.git - Via SSH, l'url est de la forme [email protected]:username/repository.git
Pour publier les commits d'une nouvelle branche (qu'on a en local mais sur le serveur distant) :
Pour publier les modifications de toutes les branches :
La commande suivante permet de voir quel dépôt distant est associé au dépôt local :

