Utiliser git

Configuration

À la première utilisation, il est nécessaire de configurer ses identifiants, enregistrés dans le fichier ~/.gitconfig avec les commandes

git config --global user.name "Prenom Nom"
git config --global user.email "myemail@myhost.fr"
git config -l

Il est possible de définir des outils, comme l’éditeur par défaut, le logiciel utlisé pour comparer des fichiers ou effectuer des fusions de version, etc.

git config --global core.editor vim
git config --global merge.tool vimdiff

ou encore de personnaliser son interface, par exemple avec

git config --global color.ui true

On peut aussi définir des alias

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.s status

Les branches ne sont pas explicitement visibles en ligne de commande. Pour remédier à cela, il est possible de modifier le prompt de son shell, en ajoutant par exemple au fichier .bashrc les lignes suivantes :

function parse_git_branch_and_add_brackets {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\ \[\1\]/'
}

et

PS1="\[\e[30;1m\]\u\[\e[34;1m\]@\h:\[\e[0;32m\]\$(parse_git_branch_and_add_brackets)\[\033[0m\]\[\e[34;1m\]\w$ \[\e[0m\]"

Commandes

Initialisation

Pour initialiser un dépôt localement, il suffit de faire

git init

ce qui crée un répertoire .git/ dans lequel sont tous les éléments de versionnement. Supprimer ce répertoire suffit pour supprimer le suivi par git.

Lorsqu’on a échangé ses clef SSH avec le gitlab du Pôle, il est possible de cloner un projet du dépôt distant, pour créer une copie locale via

git clone git@gitlab.pmcs2i.ec-lyon.fr:<account>/<projet>.git

Enfin, pour créer un dépôt distant sur un gitlab auquel on a accès, il suffit de faire

git push --set-upstream git@gitlab.pmcs2i.ec-lyon.fr:<account>/<nouveau-projet>.git master

lorsque des premiers fichiers auront été enregistrés dans l’index.

Observer l’état du dépôt

git status

Voir les changements pour un enregistrement ou un fichier

git show [commit]:[file]

Afficher l’historique des enregistrements

git log

Lister par date et auteur les changements dans un fichier (affiche les métadonnées)

git blame [file]

Afficher les différences sur les fichiers en attente (resp. déjà indexés)

git diff (resp. --cached)

Afficher les différences sur tous les fichiers

git diff HEAD

Afficher les différences entre deux enregistrements

git diff commit1 commit2

Afficher les différences entre deux branches

git diff branch1..branch2

Effectuer des modifications

Inscription dans l’index (stage), prêt pour l’enregistrement (commit)

git add [file]

Tout mettre dans l’index

git add .

Supprimer ou renommer des fichiers

git rm file
git mv file1 file2

Enregistrer dans l’historique les fichiers nouvellement indexés

git commit -m "commit message"

Enregistrer tous les fichiers de l’index l’historique

git commit -m "commit message" -a

Revenir en arrière

Supprimer le messsage qui vient d’être mis à l’historique

git commit --amend

Désindexer un fichier en gardant les modifications

git reset [file]

Revenir au dernier commit (dernier enregistrement dans l’historique)

git reset --hard [SHA1]

Récupérer une version antérieure dans détruire les plus récentes

git checkout SHA1

Mettre de côté un travail inachevé

git stash

Travailler avec des branches

Lister les branches locales [et distantes]

git branch [-av]

Créer une nouvelle branche

git branch <dev-new>

Passer dans la branche <dev-new> et mettre à jour le répertoire de travail

git checkout <dev-new>

Créer une nouvelle branche et travailler dedans simultanément

git checkout -b <dev-new>

ou encore, depuis la version 2.23,

git switch -c <dev-new>

-c étant l’abbréviation de --create

Fusionner la branche branch1 dans la branche branch2

git checkout <branch2>
git merge <branch1>

Détruire la branche new, même si elle n’a pas été fusionnée

git branch -D <new>

Détruire la branche une fois fusionnée

git branch -d <new>

Changer de branche (de <new> vers <main>)

[new] git switch <main>

Récupérer une branche distante en créant une branche locale du même nom que la branche distante

git checkout -t <origin/remote-branch>

Récupérer une branche distante en créant une branche locale avec un nom local

git checkout --track -b <local-branch> <remote-branch>

Supprimer une branche distante

git push origin --delete <remote-branch>

Mettre à jour la liste des branches (élaguer)

git fetch --prune

Synchroniser

Récupérer les dernières modifications du dépôt (origin) sans les intégrer localement (no merge)

git fetch

Récupérer les dernières modifications du dépôt et les fusionner localement

git pull

Récupérer les dernières modifications du dépôt, fusionner et construire un historique linéaire

git pull –rebase

Pousser les modifications locales dans le dépôt (origin)

git push
git push origin master