Vous êtes sur la page 1sur 124

Git : concepts de base

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 63


Plan

1 Premier Commit

2 Second (ou nième) Commit

3 Afficher la liste de Commit

4 Connaı̂tre la différence entre deux versions

5 Naviguer entre les Commit

6 Modifier le message du dernier Commit

7 Annuler un Commit

8 Supprimer des modifications

H & H: Research and Training 2 / 63


Plan

9 Les tags

10 Les branches

11 La fusion

12 Le rebase

13 La planque (stash)

14 La recherche

15 Le fichier .gitignore

16 L’historique du pointeur HEAD

H & H: Research and Training 3 / 63


Premier Commit

Premier Commit

Deux étapes
H I ©
EL
Indexation : ajouter le fichier au Staging Area
U
O
f E LM
Validation : valider seulement les fichiers modifiés et indexés

ch r e
©A
Avant indexation, tous les fichiers se trouvent dans le staging area

H & H: Research and Training 4 / 63


Premier Commit

Premier Commit
Vérifions le contenu de notre dépôt
git status

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 5 / 63


Premier Commit

Premier Commit
Vérifions le contenu de notre dépôt
git status

Commençons par créer un fichier file.txt


touch file.txt
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 5 / 63


Premier Commit

Premier Commit
Vérifions le contenu de notre dépôt
git status

Commençons par créer un fichier file.txt


touch file.txt
H I ©
UEL
O
Vérifions le contenu de notre dépôt
f E LM
git status
ch r e
©A

H & H: Research and Training 5 / 63


Premier Commit

Premier Commit
Vérifions le contenu de notre dépôt
git status

Commençons par créer un fichier file.txt


touch file.txt
H I ©
UEL
O
Vérifions le contenu de notre dépôt
f E LM
git status
ch r e
©A
Ajoutons une ligne dans file.txt (utiliser subl file.txt)
first

H & H: Research and Training 5 / 63


Premier Commit

Premier Commit
Vérifions le contenu de notre dépôt
git status

Commençons par créer un fichier file.txt


touch file.txt
H I ©
UEL
O
Vérifions le contenu de notre dépôt
f E LM
git status
ch r e
©A
Ajoutons une ligne dans file.txt (utiliser subl file.txt)
first

Vérifions le contenu de notre dépôt


git status
H & H: Research and Training 5 / 63
Premier Commit

Premier Commit
Indexons file.txt
git add file.txt

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 6 / 63


Premier Commit

Premier Commit
Indexons file.txt
git add file.txt

On bien
H I ©
git add . UEL
O
f E LM
ch r e
©A

H & H: Research and Training 6 / 63


Premier Commit

Premier Commit
Indexons file.txt
git add file.txt

On bien
H I ©
git add . UEL
O
f E LM
ou aussi
ch r e
git add --all ©A

H & H: Research and Training 6 / 63


Premier Commit

Premier Commit
Indexons file.txt
git add file.txt

On bien
H I ©
git add . UEL
O
f E LM
ou aussi
ch r e
git add --all ©A
Vérifions le contenu de notre dépôt
git status

H & H: Research and Training 6 / 63


Premier Commit

Premier Commit

Faisons le commit

H I ©
EL
git commit -m "first commit"

O U
f E LM
ch r e
©A

H & H: Research and Training 7 / 63


Premier Commit

Premier Commit

Faisons le commit

H I ©
EL
git commit -m "first commit"

O U
f E LM
r e
Vérifions le contenu de notre dépôt
ch
git status
©A

H & H: Research and Training 7 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Deux façons de faire H I ©


UEL
O
Refaire les deux étapes de la section précédente

f E LM
Fusionner les deux étapes
ch r e
©A

H & H: Research and Training 8 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Vérifions le contenu de notre dépôt


git status

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 9 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Vérifions le contenu de notre dépôt


git status

H I ©
U EL
Ajoutons une seconde ligne dans file.txt (son contenu devient)
first
L MO
second
r e f E
A ch
©

H & H: Research and Training 9 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Vérifions le contenu de notre dépôt


git status

H I ©
U EL
Ajoutons une seconde ligne dans file.txt (son contenu devient)
first
L MO
second
r e f E
A ch
©
Vérifions le contenu de notre dépôt
git status

H & H: Research and Training 9 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Faisons le commit
git commit -a -m "second commit"

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 10 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Faisons le commit
git commit -a -m "second commit"

H I ©
UEL
Ou bien
M O
git commit -am "secondE
f L
commit"
ch r e
© A

H & H: Research and Training 10 / 63


Second (ou nième) Commit

Second (ou nième) Commit

Faisons le commit
git commit -a -m "second commit"

H I ©
UEL
Ou bien
M O
git commit -am "secondE
f L
commit"
ch r e
© A
Vérifions le contenu
git status

H & H: Research and Training 10 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Vérifions l’historique
git log

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 11 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Vérifions l’historique
git log

H I ©
UEL
Pour un affichage mono-ligne O
git log --oneline
f E LM
ch r e
©A

H & H: Research and Training 11 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Vérifions l’historique
git log

H I ©
UEL
Pour un affichage mono-ligne O
git log --oneline
f E LM
ch r e
©A
Pour un affichage mono-ligne mais avec un identifiant complet
git log --pretty=oneline

H & H: Research and Training 11 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Pour un afficher seulement les deux derniers Commit


git log -2

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 12 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Pour un afficher seulement les deux derniers Commit


git log -2

H I ©
UEL
O
Pour afficher les points de différences avec le Commit précédent
git log -p -3
f E LM
ch r e
©A

H & H: Research and Training 12 / 63


Afficher la liste de Commit

Afficher la liste de Commit

Pour un afficher seulement les deux derniers Commit


git log -2

H I ©
UEL
O
Pour afficher les points de différences avec le Commit précédent
git log -p -3
f E LM
ch r e
©A
Pour un afficher les Commit sous forme d’un graphe
git log --oneline --graph

H & H: Research and Training 12 / 63


Connaı̂tre la différence entre deux versions

Afficher la liste de Commit

Les points de différence entre deux Commit

H I ©
EL
git diff idCommit1 idCommit2

O U
f E LM
ch r e
©A

H & H: Research and Training 13 / 63


Connaı̂tre la différence entre deux versions

Afficher la liste de Commit

Les points de différence entre deux Commit

H I ©
EL
git diff idCommit1 idCommit2

O U
f E LM
r e
La différence d’un Commit avec le staging area
ch
git diff idCommit1
©A

H & H: Research and Training 13 / 63


Naviguer entre les Commit

Naviguer entre les Commit

H I ©
Naviguer entre les Commit (ou voyager dans leE
U L
temps)

L MO
Vérifier le contenu d’un fichier dans un commit précédent

r e f E
c h
©A

H & H: Research and Training 14 / 63


Naviguer entre les Commit

Naviguer entre les Commit


Aller sur un autre Commit
git checkout idCommit

idCommit : identifiant du commit

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 15 / 63


Naviguer entre les Commit

Naviguer entre les Commit


Aller sur un autre Commit
git checkout idCommit

idCommit : identifiant du commit

H I ©
On peut faire aussi UEL
O
git checkout HEADˆˆˆ
f E LM
r e
chancêtre du commit actuel
A
HEADˆˆˆ : le troisième
©

H & H: Research and Training 15 / 63


Naviguer entre les Commit

Naviguer entre les Commit


Aller sur un autre Commit
git checkout idCommit

idCommit : identifiant du commit

H I ©
On peut faire aussi UEL
O
git checkout HEADˆˆˆ
f E LM
r e
chancêtre du commit actuel
A
HEADˆˆˆ : le troisième
©
Ou encore
git checkout HEAD˜3

HEAD∼ 3 : le troisième ancêtre du commit actuel


H & H: Research and Training 15 / 63
Naviguer entre les Commit

Naviguer entre les Commit

On peut faire aussi


git checkout idCommitˆˆˆ
H I ©
idCommitˆˆˆ : le troisième ancêtre du Commit prE
U Lé
écis

L MO
r e f E
A ch
©

H & H: Research and Training 16 / 63


Naviguer entre les Commit

Naviguer entre les Commit

On peut faire aussi


git checkout idCommitˆˆˆ
H I ©
idCommitˆˆˆ : le troisième ancêtre du Commit prE
U Lé
écis

L MO
Ou encore
r e f E
A ch
©
git checkout idCommit˜3

idCommit∼ 3 : le troisième ancêtre du Commit précisé

H & H: Research and Training 16 / 63


Naviguer entre les Commit

Naviguer entre les Commit

H I ©
EL
Pour pointer sur le dernier commit sans préciser son identifiant
U
O
git checkout master
f E LM
ch r e
©A

H & H: Research and Training 17 / 63


Modifier le message du dernier Commit

Modifier le message du dernier Commit


En utilisant l’argument m
git commit --amend -m "second commit"

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 18 / 63


Modifier le message du dernier Commit

Modifier le message du dernier Commit


En utilisant l’argument m
git commit --amend -m "second commit"

H I ©
Sans utiliser l’argument m
UEL
O
LM
git commit --amend

r e f E
ch
Ensuite
©A
Saisir i pour modifier le message
Pour terminer, cliquer sur echap puis saisir :wq
Valider en cliquant sur Entree

H & H: Research and Training 18 / 63


Annuler un Commit

Annuler un Commit

Avant cela
Créer un deuxième fichier file2.txt et faire un troisième
Commit avec le message creating file2.txt
H I ©
EL
Ajouter une troisième ligne third dans file.txt et faire un
OU
cinquième Commit avec le message third
M
Ajouter une quatrième f E
ligne Lfourth dans file.txt et faire un
e
chravec le message fourth
cinquième Commit
© A

H & H: Research and Training 19 / 63


Annuler un Commit

Annuler un Commit

Avant cela
Créer un deuxième fichier file2.txt et faire un troisième
Commit avec le message creating file2.txt
H I ©
EL
Ajouter une troisième ligne third dans file.txt et faire un
OU
cinquième Commit avec le message third
M
Ajouter une quatrième f E
ligne Lfourth dans file.txt et faire un
e
chravec le message fourth
cinquième Commit
© A
Vérifier les nouvelles modifications
git log --oneline

H & H: Research and Training 19 / 63


Annuler un Commit

Annuler un Commit

Comment annuler le commit ayant comme message creating


file2
git revert idCommit
H I ©
UEL
O
Ensuite, (modifier le message et) cliquer sur echap puis saisir :wq et
cliquer sur Entree pour quitter
f E LM
ch r e
©A

H & H: Research and Training 20 / 63


Annuler un Commit

Annuler un Commit

Comment annuler le commit ayant comme message creating


file2
git revert idCommit
H I ©
UEL
O
Ensuite, (modifier le message et) cliquer sur echap puis saisir :wq et
cliquer sur Entree pour quitter
f E LM
ch r e
©A
Vérifier l’annulation avec
git log --oneline

H & H: Research and Training 20 / 63


Supprimer des modifications

Supprimer des modifications

Trois possibilités

H I ©
EL
Annuler le commit et garder les modifications dans le working

OU
directory (mode mixed : par défaut)
M
ELles modifications dans le staging
Annuler le commit et garder
area (mode soft) ref
A ch
Annuler©le commit et ne pas garder les modifications (mode hard)

H & H: Research and Training 21 / 63


Supprimer des modifications

Supprimer des modifications


Syntaxe
git reset --mode idCommit

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 22 / 63


Supprimer des modifications

Supprimer des modifications


Syntaxe
git reset --mode idCommit

Exemple H I ©
UEL
git reset --hard idCommit O
f E LM
ch r e
©A

H & H: Research and Training 22 / 63


Supprimer des modifications

Supprimer des modifications


Syntaxe
git reset --mode idCommit

Exemple H I ©
UEL
git reset --hard idCommit O
f E LM
ch r e
Explication ©A
Tous les Commit réalisés après le commit ayant comme identifiant
idCommit seront et impossible de les récupérer.
En faisant git status, il n’y a rien à indexer ni à valider.

H & H: Research and Training 22 / 63


Supprimer des modifications

Supprimer des modifications

Exemple 2
git reset --soft idCommit

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 23 / 63


Supprimer des modifications

Supprimer des modifications

Exemple 2
git reset --soft idCommit

H I ©
UEL
O
Explication
f E LM
ch r e
Tous les Commit réalisés après le commit ayant comme identifiant
idCommit.
©A
En faisant git status, les modifications sont dans le staging
area.

H & H: Research and Training 23 / 63


Les tags

Les tags
Problématique

Pour accéder à un commit qui présente une version importante de


notre projet

H I ©
Il faut chercher le commit en question en lisant les messages de
tous les Commit, et ensuite faire git checkout
UEL
L
Solution : utiliser les étiquettes MO
(tags)
r e f E
A ch
©

H & H: Research and Training 24 / 63


Les tags

Les tags
Problématique

Pour accéder à un commit qui présente une version importante de


notre projet

H I ©
Il faut chercher le commit en question en lisant les messages de
EL
tous les Commit, et ensuite faire git checkout
U
L
Solution : utiliser les étiquettes MO
(tags)
r e f E
A ch
©quoi ?
Les tags, c’est

une étiquette
permet de marquer un Commit/une version de notre application
référence vers un Commit
H & H: Research and Training 24 / 63
Les tags

Les tags
Syntaxe de création d’un tag sur le Commit actuel
git tag -a nom-tag -m "message"

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 25 / 63


Les tags

Les tags
Syntaxe de création d’un tag sur le Commit actuel
git tag -a nom-tag -m "message"

Exemple
H I ©
git tag -a v0 -m "premiere versionE
U L projet"
du

L MO
r e f E
A ch
©

H & H: Research and Training 25 / 63


Les tags

Les tags
Syntaxe de création d’un tag sur le Commit actuel
git tag -a nom-tag -m "message"

Exemple
H I ©
git tag -a v0 -m "premiere versionE
U L projet"
du

L MO
r e f Esur un commit en utilisant son
ch
Syntaxe de création d’un tag
identifiant
© A
git tag -a nom-tag idCommit -m "message"

H & H: Research and Training 25 / 63


Les tags

Les tags
Syntaxe de création d’un tag sur le Commit actuel
git tag -a nom-tag -m "message"

Exemple
H I ©
git tag -a v0 -m "premiere versionE
U L projet"
du

L MO
r e f Esur un commit en utilisant son
ch
Syntaxe de création d’un tag
identifiant
© A
git tag -a nom-tag idCommit -m "message"

Exemple
git tag -a v0 -m "premiere version du projet"
H & H: Research and Training 25 / 63
Les tags

Les tags
On peut aussi se positionner sur un tag
git checkout nom-tag

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 26 / 63


Les tags

Les tags
On peut aussi se positionner sur un tag
git checkout nom-tag

Et aussi ˆ et ∼
H I ©
git checkout nom-tagˆ UEL
O
f E LM
ch r e
©A

H & H: Research and Training 26 / 63


Les tags

Les tags
On peut aussi se positionner sur un tag
git checkout nom-tag

Et aussi ˆ et ∼
H I ©
git checkout nom-tagˆ UEL
O
f E LM
Pour lister les tags
ch r e
git tag --list ©A

H & H: Research and Training 26 / 63


Les tags

Les tags
On peut aussi se positionner sur un tag
git checkout nom-tag

Et aussi ˆ et ∼
H I ©
git checkout nom-tagˆ UEL
O
f E LM
Pour lister les tags
ch r e
git tag --list ©A
Exemple
git tag nom-tag --delete

H & H: Research and Training 26 / 63


Les branches

Les branches
Les branches, oui on en connait déjà une : master
branche principale
contenant seulement des Commit représentant les différentes
versions de notre application
H I ©
UEL
O
Comment faire alors ? ⇒ Créer des branches et les utiliser

f E LM
ch r e
©A

H & H: Research and Training 27 / 63


Les branches

Les branches
Les branches, oui on en connait déjà une : master
branche principale
contenant seulement des Commit représentant les différentes
versions de notre application
H I ©
U EL
O
Comment faire alors ? ⇒ Créer des branches et les utiliser

f E LM
Une branche, c’est c h?r e
© A quoi

déviation par rapport à la branche principale


pointeur sur le dernier Commit
permettant de développer une nouvelle fonctionnalité, préparer
une correction
H & H: Research and Training 27 / 63
Les branches

Les branches

Pour créer une branche


git branch nom-branche

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 28 / 63


Les branches

Les branches

Pour créer une branche


git branch nom-branche

H I ©
UEL
Changer de branche
M O
f E
git checkout nom-branche L
ch r e
© A

H & H: Research and Training 28 / 63


Les branches

Les branches

Pour créer une branche


git branch nom-branche

H I ©
UEL
Changer de branche
M O
f E
git checkout nom-branche L
ch r e
© A
Créer et changer de branche
git checkout -b nom-branche

H & H: Research and Training 28 / 63


Les branches

Les branches
Remarque 1

En créant une branche, cette dernière pointe sur le commit à


partir duquel elle a été créée

H I ©
UEL
O
LM
Pour vérifier
git log --oneline
r e f E
ch
©A

H & H: Research and Training 29 / 63


Les branches

Les branches
Remarque 1

En créant une branche, cette dernière pointe sur le commit à


partir duquel elle a été créée

H I ©
UEL
O
LM
Pour vérifier
git log --oneline
r e f E
ch
©A
Remarque 2

En faisant un Commit à partir de la branche créée, cette dernière


dévie de la branche principale

H & H: Research and Training 29 / 63


Les branches

Les branches

Pour lister les branches locales


git branch --list

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 30 / 63


Les branches

Les branches

Pour lister les branches locales


git branch --list

H I ©
Ou tout simplement UEL
O
git branch
f E LM
ch r e
©A

H & H: Research and Training 30 / 63


Les branches

Les branches

Pour lister les branches locales


git branch --list

H I ©
Ou tout simplement UEL
O
git branch
f E LM
ch r e
© A
Pour lister les branches (avec l’identifiant du dernier commit de
chaque branche)
git branch -v

H & H: Research and Training 30 / 63


Les branches

Les branches

Pour lister les branches distantes

H I ©
EL
git branch -r

O U
f E LM
ch r e
©A

H & H: Research and Training 31 / 63


Les branches

Les branches

Pour lister les branches distantes

H I ©
EL
git branch -r

O U
f E LM
Ou aussi
ch r e
git branch --all
©A

H & H: Research and Training 31 / 63


Les branches

Les branches

Pour supprimer une branche vide (ou fusionnée)

H I ©
EL
git branch -d nom-branche

O U
f E LM
ch r e
©A

H & H: Research and Training 32 / 63


Les branches

Les branches

Pour supprimer une branche vide (ou fusionnée)

H I ©
EL
git branch -d nom-branche

O U
f E LM
r e
Pour forcer la suppression d’une branche
ch
©A
git branch -D nom-branche

H & H: Research and Training 32 / 63


La fusion

La fusion

Problématique
H I ©
Lors de l’élaboration d’un projet, plusieursE
U L seront
branches
créées, chacune pour une tâcheM Oparticulière
bien
f L
E et rapatrier les modifications
r e
Solution : fusionner les branches
h une autre
cdans
d’une branche
© A

H & H: Research and Training 33 / 63


La fusion

La fusion

Fusion : deux cas possibles


sans conflit
fast forward : sans commit de fusion

H I ©
non fast forward (avec l’option --no-ff) : avec un commit de
EL
OU
merge
M
Lde merge
f E
avec conflit : avec un commit
e
A chr
©

H & H: Research and Training 34 / 63


La fusion

La fusion

Fusion : deux cas possibles


sans conflit
fast forward : sans commit de fusion

H I ©
non fast forward (avec l’option --no-ff) : avec un commit de
EL
OU
merge
M
Lde merge
f E
avec conflit : avec un commit
e
A chr
©
Conflit ?
Sur deux branches différentes, sur une même ligne d’un même
fichier, on a deux codes différents

H & H: Research and Training 34 / 63


La fusion

La fusion

H I ©
UEL
O
f E LM
ch r e
©A
À partir de la branche master
git merge nom-branche

H & H: Research and Training 35 / 63


La fusion

La fusion

H I ©
UEL
O
f E LM
ch r e
©A
Il faut ajouter l’argument --no-ff
git merge --no-ff nom-branche

H & H: Research and Training 36 / 63


La fusion

La fusion

H I ©
U EL
O
f E LM
ch r e
Étapes ©A
Exécuter la commande git merge nom-branche
Résoudre le conflit en modifiant le(s) fichier(s) de conflit
Faire un Commit de merge
H & H: Research and Training 37 / 63
La fusion

La fusion

On peut annuler l’opération sans faire le commit de merge (après la


détection un conflit) H I ©
UEL
git merge --abort O
f E LM
git reset --merge
ch r e
©A
git reset --hard HEAD

H & H: Research and Training 38 / 63


La fusion

La fusion

H I ©
On peut toujours annuler le merge
UEL
O
git reset --hard HEADˆ
f E LM
ch r e
©A

H & H: Research and Training 39 / 63


La fusion

La fusion

Exercice 1
Créer un nouveau repository Git

H I ©
EL
Ajouter un fichier et le commiter (C1)
Créer une branche (B1) à partir de C1O U
f E LM
Faire un checkout sur B1
ch r e
©A
Modifier le fichier et faire un Commit (C2)
Merge B1 dans master de manière à avoir un Commit de merge
dans master

H & H: Research and Training 40 / 63


La fusion

La fusion

Exercice 2
Créer un nouveau repository Git
Ajouter un fichier et le commiter (C1)
H I ©
U EL
O
Modifier le fichier et le commiter (C2)
M
Créer une branche (B1) àE
f L
partir de C1
r e
chsur B1
A
Faire un checkout
©
Modifier le fichier et faire un Commit (C3)
Merge B1 dans master en résolvant le conflit

H & H: Research and Training 41 / 63


Le rebase

Le rebase

Problème de la fusion
Des cycles, des fois, inutiles
Des Commit de merge non nécessaires
H I ©
Solution : rebase
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 42 / 63


Le rebase

Le rebase

Problème de la fusion
Des cycles, des fois, inutiles
Des Commit de merge non nécessaires
H I ©
Solution : rebase
U EL
O
f E LM
ch
Le rebase, permet de r e
© A
manipuler l’historique en réécrivant le passé
linéariser le graphe de commit en évitant les Commit de merge et
en fusionnant les Commit d’une même branche dans un seul
Commit

H & H: Research and Training 42 / 63


Le rebase

Le rebase

H I ©
UEL
O
f E LM
ch r e
©A
Depuis branche1, on exécute
git rebase master

H & H: Research and Training 43 / 63


Le rebase

Le rebase

Remarque

H I ©
EL
master, branche principale, décalée par rapport à branche1
U
O
f E LM
Solution : fast forward
ch r e
git merge branche1 ©A

H & H: Research and Training 44 / 63


Le rebase

Le rebase

Exercice
Créer un nouveau repository Git
Ajouter un fichier et le commiter (C1)
H I ©
UEL
O
Modifier le fichier et le commiter (C2)
M
Créer une branche (B1) àE
f L
partir de C1
r e
chsur B1
A
Faire un checkout
©
Créer un nouveau fichier et faire un Commit (C3)
Merge B1 dans master de manière à avoir un historique linéaire

H & H: Research and Training 45 / 63


Le rebase

Le rebase

Le rebase interactif
inverser l’ordre de deux ou plusieurs Commit
modifier le message d’un Commit
H I ©
UEL
supprimer un Commit
M O
f
fusionner plusieurs Commit L
Een un seul
ch r e
© A

H & H: Research and Training 46 / 63


Le rebase

Le rebase

Le rebase interactif
inverser l’ordre de deux ou plusieurs Commit
modifier le message d’un Commit
H I ©
UEL
supprimer un Commit
M O
f
fusionner plusieurs Commit L
Een un seul
ch r e
© A
Comment ?
git rebase -i idCommit

H & H: Research and Training 46 / 63


Le rebase

Le rebase

Comment fusionner plusieurs Commit ? (dans cet exemple 3)


Commençons par
créer un fichier c.txt et faire un Commit
H I ©
créer un fichier d.txt et faire un Commit EL
M OU
f E L
créer un fichier e.txt et faire un Commit

chr e
© A
En faisant git log --oneline
e8058fc (HEAD -> master) commit e
ff2c409 commit d
5960613 commit c

H & H: Research and Training 47 / 63


Le rebase

Pour fusionner les trois derniers Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit c
pick ff2c409 commit d
pick e8058fc commit e

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 48 / 63


Le rebase

Pour fusionner les trois derniers Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit c
pick ff2c409 commit d
pick e8058fc commit e

H I ©
UEL
O
Dans vim
f E LM
ch r e
cliquer sur i pour avoir le mode INSERTION

©A
remplacer pick de deux derniers Commit par squash

cliquer sur echap, saisir :wq et cliquer sur entree

H & H: Research and Training 48 / 63


Le rebase

Pour fusionner les trois derniers Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit c
pick ff2c409 commit d
pick e8058fc commit e

H I ©
UEL
O
Dans vim
f E LM
ch r e
cliquer sur i pour avoir le mode INSERTION

©A
remplacer pick de deux derniers Commit par squash

cliquer sur echap, saisir :wq et cliquer sur entree

Vérifier les changements


git log --oneline

H & H: Research and Training 48 / 63


Le rebase

Le rebase

Comment supprimer des Commit ?


Commençons par
créer un fichier f.txt et faire un Commit
H I ©
créer un fichier g.txt et faire un Commit EL
M OU
f E L
créer un fichier h.txt et faire un Commit

chr e
© A
En faisant git log --oneline
e8058fc (HEAD -> master) commit h
ff2c409 commit g
5960613 commit f

H & H: Research and Training 49 / 63


Le rebase

Pour supprimer des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit f
pick ff2c409 commit g
pick e8058fc commit h

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 50 / 63


Le rebase

Pour supprimer des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit f
pick ff2c409 commit g
pick e8058fc commit h

H I ©
UEL
O
Dans vim

f E LM
ch r e
cliquer sur i pour avoir le mode INSERTION

©A
remplacer pick par drop pour les Commit à supprimer

cliquer sur echap, saisir :wq et cliquer sur entree

H & H: Research and Training 50 / 63


Le rebase

Pour supprimer des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit f
pick ff2c409 commit g
pick e8058fc commit h

H I ©
UEL
O
Dans vim

f E LM
ch r e
cliquer sur i pour avoir le mode INSERTION

©A
remplacer pick par drop pour les Commit à supprimer

cliquer sur echap, saisir :wq et cliquer sur entree

Vérifier les changements


git log --oneline

H & H: Research and Training 50 / 63


Le rebase

Le rebase

Comment renommer un Commit ?

H I ©
EL
Commençons par créer un fichier i.txt et faire un Commit

O U
f E LM
En faisant git log --oneline
ch r e
©A
e8058fc (HEAD -> master) commit i

H & H: Research and Training 51 / 63


Le rebase

Pour renommer un Commit


git rebase -i HEAD˜1

La première ligne affichée


pick e8058fc commit i

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 52 / 63


Le rebase

Pour renommer un Commit


git rebase -i HEAD˜1

La première ligne affichée


pick e8058fc commit i

H I ©
UEL
Dans vim
O
f E LM
cliquer sur i pour avoir le mode INSERTION

ch r e
©A
remplacer pick par reword et modifier le message

cliquer sur echap, saisir :wq et cliquer sur entree

H & H: Research and Training 52 / 63


Le rebase

Pour renommer un Commit


git rebase -i HEAD˜1

La première ligne affichée


pick e8058fc commit i

H I ©
UEL
Dans vim
O
f E LM
cliquer sur i pour avoir le mode INSERTION

ch r e
©A
remplacer pick par reword et modifier le message

cliquer sur echap, saisir :wq et cliquer sur entree

Vérifier les changements


git log --oneline

H & H: Research and Training 52 / 63


Le rebase

Le rebase

Comment inverser l’ordre des Commit ?


Commençons par
créer un fichier j.txt et faire un Commit
H I ©
créer un fichier k.txt et faire un Commit EL
M OU
f E L
créer un fichier l.txt et faire un Commit

chr e
© A
En faisant git log --oneline
e8058fc (HEAD -> master) commit l
ff2c409 commit k
5960613 commit j

H & H: Research and Training 53 / 63


Le rebase

Pour inverser des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit j
pick ff2c409 commit k
pick e8058fc commit l

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 54 / 63


Le rebase

Pour inverser des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit j
pick ff2c409 commit k
pick e8058fc commit l

H I ©
U EL
O
Dans vim

f E LM
ch r e
placer le curseur au début du Commit à déplacer puis cliquer sur dd pour le couper

©A
cliquer sur p pour coller le Commit copié

cliquer sur echap, saisir :wq et cliquer sur entree

H & H: Research and Training 54 / 63


Le rebase

Pour inverser des Commit


git rebase -i HEAD˜3

Les trois premières lignes affichées


pick 5960613 commit j
pick ff2c409 commit k
pick e8058fc commit l

H I ©
U EL
O
Dans vim

f E LM
ch r e
placer le curseur au début du Commit à déplacer puis cliquer sur dd pour le couper

©A
cliquer sur p pour coller le Commit copié

cliquer sur echap, saisir :wq et cliquer sur entree

Vérifier les changements


git log --oneline

H & H: Research and Training 54 / 63


La planque (stash)

La planque (stash)

Problématique

H I ©
Des travaux non-finis (qu’on ne peut valider)
UEL
O
LM
Nécessité de publier des travaux validés (d’une autre branche)

r e f E
Impossible de changer de branche sans supprimer les
ch
©A
modifications courantes ⇒ Solution : utiliser la planque pour
mettre les travaux encours de coté

H & H: Research and Training 55 / 63


La planque (stash)

Exemple : sur la branche master


echo bonjour > fichier1.txt # crée et ajoute bonjour dans fichier.txt
echo bonsoir > fichier2.txt
git add . # indexer les deux fichiers
git commit -m "first commit"
git checkout -b ma-branche

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 56 / 63


La planque (stash)

Exemple : sur la branche master


echo bonjour > fichier1.txt # crée et ajoute bonjour dans fichier.txt
echo bonsoir > fichier2.txt
git add . # indexer les deux fichiers
git commit -m "first commit"
git checkout -b ma-branche

H I ©
EL
Exemple : sur la branche ma-branche
echo hello >> fichier1.txt
O U
git commit -am "second commit for fichier1"
echo ciao >> fichier1.txt #
f E LM
ch r e
©A

H & H: Research and Training 56 / 63


La planque (stash)

Exemple : sur la branche master


echo bonjour > fichier1.txt # crée et ajoute bonjour dans fichier.txt
echo bonsoir > fichier2.txt
git add . # indexer les deux fichiers
git commit -m "first commit"
git checkout -b ma-branche

H I ©
EL
Exemple : sur la branche ma-branche
echo hello >> fichier1.txt
O U
git commit -am "second commit for fichier1"
echo ciao >> fichier1.txt #
f E LM
ch r e
©A
Impossible de changer de branche car on n’a pas validé les dernières modifications
$ git checkout master
error: Your local changes to the following files would be overwritten
by checkout:
file1.txt
Please commit your changes or stash them before you switch branches.
Aborting

H & H: Research and Training 56 / 63


La planque (stash)

La planque (stash)

Pour ajouter un (ou plusieurs) fichier(s) à la planque


git stash save

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 57 / 63


La planque (stash)

La planque (stash)

Pour ajouter un (ou plusieurs) fichier(s) à la planque


git stash save

H I ©
UEL
O
Si le fichier modifié se trouve dans le staging area
git stash push
f E LM
ch r e
©A

H & H: Research and Training 57 / 63


La planque (stash)

La planque (stash)

Pour ajouter un (ou plusieurs) fichier(s) à la planque


git stash save

H I ©
UEL
O
Si le fichier modifié se trouve dans le staging area
git stash push
f E LM
ch r e
©A
Pour afficher le contenu de la planque
git stash list

H & H: Research and Training 57 / 63


La planque (stash)

La planque (stash)

Pour récupérer un fichier de la planque


git stash apply

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 58 / 63


La planque (stash)

La planque (stash)

Pour récupérer un fichier de la planque


git stash apply

H I ©
UEL
O
Mais une copie de ce fichier est toujours dans la planque, vérifier
git stash list
f E LM
ch r e
©A

H & H: Research and Training 58 / 63


La planque (stash)

La planque (stash)

Pour récupérer un fichier de la planque


git stash apply

H I ©
UEL
O
Mais une copie de ce fichier est toujours dans la planque, vérifier
git stash list
f E LM
ch r e
©A
Pour vider la planque
git stash drop

H & H: Research and Training 58 / 63


La planque (stash)

La planque (stash)

Pour récupérer un fichier de la planque sans qu’une copie y reste

H I ©
EL
git stash pop

O U
f E LM
ch r e
©A

H & H: Research and Training 59 / 63


La planque (stash)

La planque (stash)

Pour récupérer un fichier de la planque sans qu’une copie y reste

H I ©
EL
git stash pop

O U
f E LM
r e
On peut préciser le nom du fichier à ajouter et donner un nom au stash
ch
©A
au moment de l’ajout, ce qui nous permettra de traiter les fichiers un
par un

H & H: Research and Training 59 / 63


La recherche

La recherche

Pour chercher un mot dans le dépôt


git grep "mot"
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 60 / 63


La recherche

La recherche

Pour chercher un mot dans le dépôt


git grep "mot"
H I ©
EL
M OU
E
Pour afficher le numéro def la L dans le fichier où le mot se
ligne
trouve
chr e
git grep ©
A
-n "mot"

H & H: Research and Training 60 / 63


Le fichier .gitignore

Le fichier .gitignore

Idée

I ©
Si on a un (ou plusieurs) fichier(s) (de configuration par exemple)
H
qu’on ne voit aucun intérêt de les valider
UEL
O
f E LM
On peut les citer dans un fichier de configuration appelé
.gitignore
ch r e
©A
Un nom par ligne
Ce fichier peut être indexé et validé

H & H: Research and Training 61 / 63


Le fichier .gitignore

Le fichier .gitignore
Exemple
echo informatique.txt >> .gitignore
echo *.html >> .gitignore
echo view/* >> .gitignore
echo java >> informatique.txt
H I ©
UEL
O
f E LM
Explication
ch r e
©A
En faisant git status, aucun fichier à indexer à l’exception de
.gitignore
Tous les fichiers avec l’extension html sont ignorés
Aussi, tous les fichiers du répertoire view

H & H: Research and Training 62 / 63


L’historique du pointeur HEAD

L’historique du pointeur HEAD

Pour connaı̂tre le journal du pointeur HEAD

H I ©
EL
git reflog

O U
f E LM
ch r e
©A

H & H: Research and Training 63 / 63


L’historique du pointeur HEAD

L’historique du pointeur HEAD

Pour connaı̂tre le journal du pointeur HEAD

H I ©
EL
git reflog

O U
f E LM
Pour avoir un peu plus de détails
ch r e
git log -g
©A

H & H: Research and Training 63 / 63

Vous aimerez peut-être aussi