Notes sur l'utilisation de Git

Git est un système de contrôle de version distribué. Contrairement aux systèmes centralisés comme SVN, Git stocke l'historique complet des versions localement pour chaque dépôt. Cela permet de travailler hors ligne, de consulter l'historique et de recréer un dépôt central rapidement en cas de problème.

Configuration de Git Pour configurer votre nom d'utilisateur et votre adresse e-mail globaux, utilisez les commandes suivantes :

git config --global user.name "Votre Nom"
git config --global user.email "votre.email@example.com"

Le paramètre --global s'applique à tous les dépôts Git sur votre machine. Vous pouvez également spécifier une configuration différente pour un dépôt spécifique.

Gestion du Dépôt

Initialisation d'un dépôt Pour initialiser un nouveau dépôt Git dans le répertoire courant :

git init

Ajout de fichiers et validation des changements Pour ajouter des fichiers à l'index (zone de staging) et valider les changements :

git add <nom_du_fichier>
git commit -m "Message de description du commit"

git add peut être utilisé plusieurs fois pour ajouter plusieurs fichiers. git commit -m enregistre les changements avec un message descriptif.

Vérification de l'état du dépôt Pour afficher l'état de votre répertoire de travail et de la zone de staging :

git status

Visualisation des modifications Pour comparer les différences entre les versions :

  • git diff : Affiche les modifications dans le répertoire de travail non encore ajoutées à la zone de staging.
  • git diff --cached : Affiche les modifications dans la zone de staging par rapport à la dernière validation.
  • git diff HEAD -- <nom_du_fichier></nom_du_fichier> : Affiche les modifications dans le répertoire de travail par rapport à la dernière validation.

Historique des commits Pour afficher l'historique complet des commits :

git log

Pour un affichage simplifié sur une seule ligne :

git log --pretty=oneline

Historique des commandes Pour consulter l'historique des commandes Git exécutées :

git reflog

Retour aux versions précédentes Pour revenir à la version précédente :

git reset --hard HEAD^

HEAD représente la version actuelle. HEAD^ est la version précédente, HEAD^^ est l'avant-dernière, et HEAD~N représente N versions précédentes. Pour revenir à une version spécifique par son ID :

git reset --hard <identifiant_du_commit>

Zones de travail

  • Répertoire de travail (Working Directory) : Les fichiers visibles dans votre dossier de projet.
  • Zone de staging (Index) : Une zone intermédiaire où vous préparez les changements avant de les valider.
  • Dépôt (Repository) : Le répertoire caché .git qui contient l'historique complet et les métadonnées du projet. git add déplace les modifications vers la zone de staging. git commit enregistre le contenu de la zone de staging dans le dépôt.

Annulation des modifications Pour annuler les modifications dans le répertoire de travail :

git checkout -- <nom_du_fichier>

Cette commande restaure le fichier à son état lors de la dernière validation ou du dernier git add. Pour annuler les modifications dans la zone de staging (les ramener dans le répertoire de travail) :

git reset HEAD <nom_du_fichier>

Ensuite, vous pouvez utiliser git checkout -- <nom_du_fichier></nom_du_fichier> pour annuler les modifications dans le répertoire de travail si nécessaire.

Suppression de fichiers Pour supprimer un fichier et l'enregistrer dans le dépôt :

git rm <nom_du_fichier>

Cela équivaut à rm <nom_du_fichier></nom_du_fichier> suivi de git add <nom_du_fichier></nom_du_fichier>. Si vous avez supprimé un fichier par erreur avec rm, vous pouvez le restaurer depuis le dépôt avec git checkout -- <nom_du_fichier></nom_du_fichier>. Si vous avez utilisé git rm et souhaitez annuler la supprestion (la ramener dans le répertoire de travail), utilisez d'abord git reset HEAD <nom_du_fichier></nom_du_fichier> puis git checkout -- <nom_du_fichier></nom_du_fichier>. Pour confirmer la suppression définitive d'un fichier du dépôt, validez les changements avec git commit -m "Suppression de <nom_du_fichier>"</nom_du_fichier>.

Dépôts Distants

Configuration des clés SSH Générez une paire de clés SSH :

ssh-keygen -t rsa -C "votre.email@example.com"

Association d'un dépôt distant Ajoutez un dépôt distant (par exemple, sur GitHub) :

git remote add origin https://github.com/votre_nom_utilisateur/nom_du_depot.git

Pousser vers le dépôt distant Pour pousser la branche actuelle vers le dépôt distant :

git push -u origin master

L'option -u établit la liaison entre la branche locale et la branche distante pour les futures commandes git push et git pull.

Clonage d'un dépôt Pour cloner un dépôt distant sur votre machine :

git clone https://github.com/nom_utilisateur/nom_du_depot.git

Branches

Création d'une branche

git branch <nom_de_la_branche>

Affichage des branches

git branch

La branche actuelle est marquée d'un astérisque (*).

Commutation de branche

git checkout <nom_de_la_branche>

Création et commutation Pour créer une nouvelle branche et s'y déplacer immédiatement :

git checkout -b <nom_de_la_branche>

Fusion de branches Pour fusionner une branche dans la branche actuelle :

git merge <nom_de_la_branche>

En cas de conflits, vous devrez les résoudre manuellement avant de valider la fusion.

Suppression d'une branche

git branch -d <nom_de_la_branche>

Visualisation de l'historique des branches

git log --graph

Fusion en mode "no-ff" Pour forcer la création d'un commit de fusion, même si un fast-forward est possible :

git merge --no-ff -m "Message de fusion" <nom_de_la_branche>

Sauvegarde de l'état de travail Pour sauvegarder temporairement les modifications non validées :

git stash

Affichage des états sauvegardés

git stash list

Restauration d'un état sauvegardé

git stash pop

Suppression d'une branche non fusionnée Pour supprimer une branche qui n'a pas encore été fusionnée :

git branch -D <nom_de_la_branche>

Informations sur les dépôts distants

git remote -v

Création d'une branche locale correspondant à une branche distante

git checkout -b nom-branche-locale origin/nom-branche-distante

Pousser une branche locale vers le distant

git push origin nom-branche-locale

Si la poussée échoue, effectuez d'abord un git pull pour récupérer les modifications distantes.

Récupérer les modifications distantes

git pull

Cela effectue un fetch suivi d'un merge. Résolvez les conflits si nécessaire.

Étiquettes (Tags) Les étiquettes sont des pointeurs vers des commits spécifiques, souvent utilisées pour marquer des versions de publication.

Création d'une étiquette

git tag <nom_de_l_etiquette>

Vous pouvez aussi spécifier un commit ID.

Ajout d'informations à une étiquette

git tag -a <nom_de_l_etiquette> -m "Description de l'étiquette" [<identifiant_du_commit>]

Étiquettes signées PGP

git tag -s <nom_de_l_etiquette> -m "Description de l'étiquette" [<identifiant_du_commit>]

Affichage de toutes les étiquettes

git tag

Pousser une étiquette vers le dépôt distant

git push origin <nom_de_l_etiquette>

Pousser toutes les étiquettes locales non poussées

git push origin --tags

Suppression d'une étiquette locale

git tag -d <nom_de_l_etiquette>

Suppression d'une étiquette distante

git push origin :refs/tags/<nom_de_l_etiquette>

Rebase

Réécriture de l'historique des commits Utilisez git rebase -i pour interagir avec une séquence de commits, par exemple pour les fusionner ou les modifier.

git rebase -i <commit_de_début>^

Les commandes disponibles dans l'éditeur interactif incluent :

  • pick (p) : Conserevr le commit.
  • reword (r) : Conserver le commit mais modifier son message.
  • edit (e) : Conserver le commit mais s'arrêter pour le modifier.
  • squash (s) : Fusionner le commit avec le précédent.
  • fixup (f) : Fusionner le commit avec le précédent sans conserver son message.
  • exec (x) : Exécuter une commande shell.
  • drop (d) : Supprimer le commit.

Appliquer des commits sur une autre branche Pour copier une séquence de commits d'une branche à une autre :

git rebase <commit_de_début>^ <commit_de_fin> --onto <nom_de_la_branche_cible>

Si vous souhaitez copier un seul commit, git cherry-pick est souvent plus simple. Après un rebase de ce type, il peut être nécessaire de faire pointer la branche cible vers le nouveau HEAD.

Personnalisation de Git

Couleurs dans le terminal

git config --global color.ui true

Ignorer des fichiers Créez un fichier .gitignore à la racine de votre projet pour spécifier les fichiers et répertoires que Git doit ignorer. Exemple de contenu pour .gitignore :

# Ignorer les fichiers temporaires
*.tmp

# Ignorer un répertoire spécifique
build/

Alias de commandes Créez des alias pour raccourcir les commandes Git courantes :

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.last 'log -1 HEAD'

Ces configurations sont stockées dans le fichier ~/.gitconfig.

Étiquettes: Git contrôle de version gestion de code ligne de commande branches

Publié le 16 juin à 16h36