Académique Documents
Professionnel Documents
Culture Documents
Introduction
Le working directory (espace de travail, ls)
Les branches
Les commit dans git contiennent votre nom et mail, ce sera important pour le TP2
Pour démarrer un nouveau dépôt, utiliser git init, puis cd pour entrer dans le répertoire
créé par git.
cd tp-git
Utiliser echo pour créer 3 nouveaux fichiers avec comme contenu une ligne “Ligne 1”
ls
# fichier1 fichier2 fichier3
Avec git status, git vous montre qu’il y a 3 nouveaux fichier dans votre répertoire de travail
qui sont “untracked” ou inconnu.
git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be
committed)
#
# fichier1
# fichier2
# fichier3
#
# nothing added to commit but untracked files present (use
"git add" to track)
Pour ajouter ces fichiers au “staging” (première étape avant de faire un commit), il faut utiliser
la commande git add. Attention: cela n’ajoute pas le fichier à git, pour se faire il faut faire
un “commit”.
Le “staging” est la partie notée par “changes to be commited”. Dans git, le “commit” correspond
à la persistance dans la base de donnée git, et le commit prend les fichiers qui sont dans le
staging.
Pour créer un nouveau commit, utiliser la commande git commit. À partir du moment ou un
fichier est dans un commit, il est persisté à jamais dans git.
git commit
# [master (root-commit) 8e8630d] Mon 1e commit
# 1 file changed, 1 insertion(+)
# create mode 100644 fichier1
Il est aussi possible de passer directement le message de commit avec -m, c’est la syntaxe que
nous utiliserons à partir de maintenant
TODO: Ajouter fichier2 et fichier3 dans un 2e commit, jusqu’à ce que git affiche “working
tree clean”, ce qui veut dire que le dépôt git contient tous les fichiers qui sont dans votre
répertoire de travail.
Vous avez déjà fait 2 commits et la commande git log vous permet de les voir
git log
# commit 888f4ecca3f04f6dc8ef5f314b279078a5086092
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:21:53 2017 +0100
#
# Mon 2e commit
#
# commit 8e8630d691ada27638084dcb1e5c4f55b0ef451d
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:12:21 2017 +0100
#
# Mon 1e commit
L’option --name-status donne la liste des fichiers modifiés (le A préfixé veut dire “added”,
vous avez aussi M pour “modified” et D pour “deleted”)
La commande git show permet de voir le contenu des modifications, les lignes ajoutées sont
préfixées d’un +, les lignes supprimées sont préfixées d’un - (ce sont les seules modifications
possibles)
Le paramètre HEAD veut dire “commit courant”
La syntaxe HEAD~1 permet de revenir un commit en arrière (HEAD est le commit courant,
HEAD~1 est le commit précédent, HEAD~2 est le commit d’avant, etc.)
La commande git diff permet de voir les modifications qu’on a fait (utile avant de passer
les fichiers dans le “staging” pour le commit), c’est le même affichage que la commande git
show de l’exercice précédent.
git diff
# diff --git a/fichier1 b/fichier1
# index 1aafa9c..304294e 100644
# --- a/fichier1
# +++ b/fichier1
# @@ -1 +1,2 @@
# Ligne 1
# +Ligne 2
# diff --git a/fichier2 b/fichier2
# index 1aafa9c..304294e 100644
# --- a/fichier2
# +++ b/fichier2
# @@ -1 +1,2 @@
# Ligne 1
# +Ligne 2
Utiliser git checkout pour récupérer la dernière version d’un fichier (si le fichier est
modifié, on revient à la version du dernier commit)
cat fichier2
# Ligne 1
# Ligne 2
cat fichier2
# Ligne 1
Utiliser git revert pour créer un commit qui est l’inverse du commit (les lignes ajoutées
seront enlevées et vice-versa)
touch poubelle
ls
# fichier1 fichier2 fichier3 poubelle
git log
# commit b010b1b337739fdb644e0161ebaba0e8de78f34f
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:56:06 2017 +0100
#
# Revert "poubelle"
#
# This reverts commit
301255866e8f06f12fad3e709e5f8e63076e7bc4.
#
# commit 301255866e8f06f12fad3e709e5f8e63076e7bc4
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:55:38 2017 +0100
#
# poubelle
#
# commit 59c88f86b6b64c6f016bb6e078d520d89826dfb7
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:41:17 2017 +0100
#
# Mon 3e commit
#
# ...
ls
# fichier1 fichier2 fichier3
Utiliser git reset pour supprimer le commit (attention : cette opération parfois est
réversible, mais avec des commandes difficiles à utiliser, éviter l’usage)
ls
# fichier1 fichier2 fichier3 poubelle
git log
# commit 59c88f86b6b64c6f016bb6e078d520d89826dfb7
# Author: Alexandre DuBreuil <adu@lesfurets.com>
# Date: Mon Nov 13 17:41:17 2017 +0100
#
# Mon 3e commit
# ...
Vous pouvez les voir comme des copies de votre espace de travail, entre lesquelles vous pouvez
basculer rapidement, avec la commande git checkout
Pour l’instant, les 2 branches sont identiques, mais les modifications de l’une ne vont pas
impacter l’autre.
On ajoute un fichier “fichierdev” dans la branche courante, soit “develop”, dans un nouveau
commit
On remarque que ce commit est présent dans la branche courante “develop” mais pas dans la
branche “master”
Ce qui veut dire que le nouveau fichier “fichierdev” est présent dans la branche “develop”, mais
pas dans master
ls
# fichier1 fichier2 fichier3 fichierdev
ls
# fichier1 fichier2 fichier3
La branche “develop” a plus de commit que la branche master, comment fait-on pour
rassembler l’historique ?
On crée un nouveau commit sur la branche “master”, on aura donc 2 branches divergeantes
comme dans cet exemple (remplacer “testing” par “develop”)
touch fichiermaster
git add fichiermaster
git commit -m "Nouveau fichier master"
# [master 509f5a4] Nouveau fichier master
# 1 file changed, 0 insertions(+), 0 deletions(-)
# create mode 100644 fichiermaster
Pour fusionner l’historique on utilise la commande git merge, en passant comme argument
l’autre (ou les autres) branche à fusionner
Lors de la fusion de branche, les conflits sont possibles si les deux branches contiennent une
modification sur le même fichier, et sur la même ligne. Si c’est le cas, git marque les conflits
dans le fichier en question, et il faut les corriger, puis compléter la fusion.
Sur la branche “master”, on enlève le commit de merge précédemment créé, pour en refaire un
nouveau.
On ajoute du contenu au fichier “fichierdev”, pour rappel, un fichier de même nom est dans la
branche “develop”
On a maintenant :
cat fichierdev
# <<<<<<< HEAD
# Contenu master
# =======
# Contenu dev
# >>>>>>> develop
Le contenu de “fichierdev” a été modifié par git, il affiche entre les chevrons «< et le égal ===
le contenu de HEAD (donc la branche “master”), et entre le égal et les chevrons »> le contenu
de la branche “develop”.
C’est au développeur de choisir quelle version il veut ! Éditez le fichier pour garder que la ligne
“Contenu master” ou “Contenu develop”
Puis il faut dire à git que la résolution de conflit est terminée en ajoutant le fichier, puis en
faisant un commit