Table des matières

GIT

http://git-scm.com

online tutorial: https://try.github.io/

http://www.atlassian.com/git/tutorials/setting-up-a-repository/git-config

http://alexgirard.com/git-book/

Lexique

Commit: Version ou snapshot d'un projet

Branche: Les commits sont affectés à des branches

Master: nom de la branche par défaut (principale)

HEAD: Curseur sur les commits = la version courante (souvent le dernier = plus récent). Le HEAD peut pointer sur une branche secondaire (autre que Master)

Origin: Repository git distant (la référence)

Staging area: Liste dans laquelle sont notés les fichiers qui feront partie du prochain commit (commande: git add)

Créer un repository local

Un repository local est un espace dans lequel on travaille.

mkdir <local-repositiory>
cd nom_depot
git init

ou

git init <local-repositiory>

On peut ensuite spécifier une orgine Git existante :

git remote add origin <remote-repositiory>

Créer un repository bare

Le git bare est le repository de référence pour tous les utilisateurs.

C'est le repository 'origin' pour git. On ne travaille jamais directement sur l'origin.

En général on utilise un utilisateur dédié (souvent git:git) pour le repository origin. Il faut alors se connecte avec cet utilisateur pour créer le 'bare'

git init <origin-repository> --bare

On peut alors créer le repository local (pour un autre utilisateur) à partir du origin :

git clone <origin-repository> <local-repositiory>

Avantage : l'origin est déjà préconfigurée dans le .git/config

Intialiser le remote à partir du local

# Crée l'origin
git init <origin-repository> --bare

# dans le dossier local racine
git remote add origin <URL>
# mise à jour de l'origin
git push origin master
# Tous les autres utilisateurs peuvent alors se synchroniser avec l'origin
git pull

Configuration

Le fichier de configuration GIT peut être défini :

Il defini les paramêtre pour GIT :

[user] 
    email = p.nom@here.org
    name = nom_programmeur 

[alias] 
    ci = commit 
    co = checkout 
    st = status 
    br = branch  
[log]
    date = "format:%Y-%m-%d %H:%M"
[format]
    pretty = "format:%C(#666666)%ad%Creset %d %C(#aa8888 #442222)%h%Creset %C(#888888)%aN%Creset %s"

Git commit

Pour créer une nouvelle version, il faut :

  1. Ajouter des fichiers dans la “staging area” (sorte de liste pour préparer le commit) :
  2. Valider le lot de modification stocké dans la “staging area” : GIT stocke tous les fichier par version (Il ne fait pas de calcul de différences entre versions successives comme subversion).

Ajout de fichiers dans la “staging area” (ou index) :

git add <filename>

Création d'une nouvelle version :

git commit -m “message…”

Il est possible de modifier le message après le commit:

git commit --amend Un éditeur est alors ouvert pour modifier le dernier message

Etat du repository

Affiche l'historique des versions (commits) :

git log

Différences entre la staging area (git add) et la version courante :

git status

Git diff

Permet de comparer des versions d'un fichier:

git diff <commit 1> <commit 2> <files>

Voir les fichiers qui ont été modifiés entre deux version:

git diff --name-only <commit 1> <commit 2>

git diff --name-only HEAD@{2} HEAD

Rollback

Annuler TOUTES les modifications an cours

git reset --hard # removes staged and working directory changes

Cf. https://stackoverflow.com/questions/1090309/git-undo-all-working-dir-changes-including-new-files

SOS

Afficher la liste des fichiers d'un projet :

git ls-tree --full-tree -r HEAD

Suppression définitive d'éléments : http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-git-repo

Récupérer uniquement quelques fichiers :

git checkout <commit>

Normalement Git ne supprime pas de commit, donc si on est perdu :

git reflog affiche la liste des commits.

On peut alors revenir sur un commit particulier avec :

git reset –hard <mon-commit> https://stackoverflow.com/questions/424071/how-to-list-all-the-files-in-a-commit

If you want to get list of changed files:

git diff-tree –no-commit-id –name-only -r <commit-hash>

If you want to get list of all files in a commit, you can use

git ls-tree –name-only -r <commit-hash>

Pull - fetch

La commande git fetch va récupérer toutes les données des commits effectués sur la branche courante qui n'existent pas encore dans votre version en local. Ces données seront stockées dans le répertoire de travail local mais ne seront pas fusionnées avec votre branche locale. Si vous souhaitez fusionner ces données pour que votre branche soit à jour, vous devez utiliser ensuite la commande git merge.

La commande git pull est en fait la commande qui regroupe les commandes git fetch suivie de git merge. Cette commande télécharge les données des commits qui n'ont pas encore été récupérées dans votre branche locale puis fusionne ensuite ces données.

Exemple

#-------------------------------------------------------------- 
# Configuration de Git 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ cat .git/config 
[core] 
repositoryformatversion = 0 filemode = true bare = false 
logallrefupdates = true 
[branch "master"] 
remote = /bkp/GITs/Test-Git 
merge = refs/heads/master 
[remote "origin"] 
url = /bkp/GITs/Test-Git/ 
fetch = refs/heads
/*:refs/remotes/origin*/
push = master fetch = master 
#-------------------------------------------------------------- 
# Création du dossier de travail avec initialisation Git 
#-------------------------------------------------------------- 
hal:/data $ git init Test-Git 
Initialized empty Git repository in /media/data/Test-Git/.git/ 
#-------------------------------------------------------------- 
# Création du dossier de référence avec initialisation Git --bare 
#-------------------------------------------------------------- 
hal:/data $ cd /bkp/GITs/ 
hal:/bkp/GITs $ git init Test-Git --bare 
Initialized empty Git repository in /media/bkp/GITs/Test-Git/ 
hal:/bkp/GITs $ cd - /media/data hal:/data 
$ cd Test-Git/ 
hal:/data/Test-Git $ echo "v1" > test.txt 
hal:/data/Test-Git $ ll 
total 8 drwxr-xr-x 7 roge roge 4096 Nov 9 09:08 .git -rw-r--r-- 1 roge roge 3 Nov 9 09:10 test.txt
#-------------------------------------------------------------- 
# Status 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git status 
On branch master Initial commit 
Untracked files: (use "git add < file>..." to include in what will be committed) 
test.txt nothing added to commit but untracked files present (use "git add" to track) 
#-------------------------------------------------------------- # 
Ajout dans Git 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git add * 
hal:/data/Test-Git $ git status 
On branch master Initial commit Changes to be committed: 
(use "git rm --cached < file>..." to unstage) new file: test.txt 
#-------------------------------------------------------------- 
# Commit 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git commit -m "v1" 
[master (root-commit) 95defef] v1 1 file changed, 1 insertion( ) create mode 100644 test.txt 
# Vérification 
hal:/data/Test-Git $ git log 
2016-11-09 12:38 (HEAD -> master) dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 
#-------------------------------------------------------------- # 
Mise à jour du repository de reference 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ 
master Counting objects: 3, done. Writing objects: 100% (3/3), 197 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0) To /bkp/GITs/Test-Git/ 
* [new branch] master -> master 
# Vérification 
hal:/data/Test-Git $ cd /bkp/GITs/Test-Git/ 
hal:/bkp/GITs/Test-Git 
$ git log 
2016-11-09 12:38 (HEAD -> master) dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 
#-------------------------------------------------------------- 
# Modification du fichier et commit 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ echo "v1.1" > test.txt 
hal:/data/Test-Git $ git status 
On branch master 
Changes not staged for commit: (use "git add < file>..." 
to update what will be committed) (use "git checkout -- < file>..." 
to discard changes in working directory) 
modified: test.txt no changes added to commit (use "git add" and/or "git commit -a") 
hal:/data/Test-Git $ git add * 
hal:/data/Test-Git $ git commit -m "v1.1" 
[master dd4b48d] v1.1 1 
file changed, 1 insertion( ), 1 deletion(-) 
hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ master 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 228 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) To /bkp/GITs/Test-Git/ 
95defef..dd4b48d master -> master 
hal:/data/Test-Git $ git log 
2016-11-09 12:38 (HEAD -> master) dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 
#-------------------------------------------------------------- 
# 3ième modification du fichier 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ echo "V1.2" > test.txt 
hal:/data/Test-Git $ git add * 
hal:/data/Test-Git $ git commit -m "V1.2" 
[master f9239f9] V1.2 1 
file changed, 1 insertion( ), 1 deletion(-) 
hal:/data/Test-Git $ git push --set-upstream /bkp/GITs/Test-Git master 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) To /bkp/GITs/Test-Git dd4b48d..f9239f9 
master -> master Branch master set up to track remote branch master from /bkp/GITs/Test-Git. 
#-------------------------------------------------------------- 
# Création d'une branche 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git checkout -b new-feature 
master Switched to a new branch 'new-feature' 
#-------------------------------------------------------------- 
# Création de changements 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ echo "V1.3.0" > test.txt 
hal:/data/Test-Git $ git add * 
hal:/data/Test-Git $ git commit -m "start new feature" 
[new-feature f37b89e] 
start new feature 1 file changed, 1 insertion( ), 1 deletion(-) 
hal:/data/Test-Git $ echo "V1.3.1" > test.txt 
hal:/data/Test-Git $ git add * 
hal:/data/Test-Git $ git commit -m "End new feature" 
[new-feature 06f6e84] End new feature 1 file changed, 1 insertion( ), 1 deletion(-) 
hal:/data/Test-Git $ git log 
2016-11-09 13:15 (HEAD -> new-feature) 06f6e84 roge End new feature 
2016-11-09 13:14 f37b89e roge start new feature 
2016-11-09 13:02 (master) 58f89b5 roge V1.2.2 
2016-11-09 13:02 71f0700 roge V1.2.1 
2016-11-09 12:56 (test-feature) f9239f9 roge V1.2 
2016-11-09 12:38 dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 
#-------------------------------------------------------------- 
# Merge: test-feature --> master 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git checkout master Switched to branch 'master' 
hal:/data/Test-Git $ git merge new-feature 
Updating 58f89b5..06f6e84 Fast-forward test.txt | 2 - 1 file changed, 1 insertion( ), 1 deletion(-) 
# Suppression de la branche 
hal:/data/Test-Git $ git branch -d new-feature 
Deleted branch new-feature (was 06f6e84). 
hal:/data/Test-Git $ git log 
2016-11-09 13:15 (HEAD -> master) 06f6e84 roge End new feature 
2016-11-09 13:14 f37b89e roge start new feature 
2016-11-09 13:02 58f89b5 roge V1.2.2 
2016-11-09 13:02 71f0700 roge V1.2.1 
2016-11-09 12:56 (test-feature) f9239f9 roge V1.2 
2016-11-09 12:38 dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 
#-------------------------------------------------------------- 
# Mise à jour du repository de reference 
#-------------------------------------------------------------- 
hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ master 
Counting objects: 12, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (12/12), 852 bytes | 0 bytes/s, done. 
Total 12 (delta 0), reused 0 (delta 0) To /bkp/GITs/Test-Git/ 
f9239f9..06f6e84 master -> master 
# Vérification 
2016-11-09 13:15 (HEAD -> master) 06f6e84 roge End new feature 
2016-11-09 13:14 f37b89e roge start new feature 
2016-11-09 13:02 58f89b5 roge V1.2.2 
2016-11-09 13:02 71f0700 roge V1.2.1 
2016-11-09 12:56 f9239f9 roge V1.2 
2016-11-09 12:38 dd4b48d roge v1.1 
2016-11-09 09:10 95defef roge v1 

Git tag

Les tag permettent de marquer des commits particuliers pour signaler des versions par exemple.

ajouter un tag :

git tag version-1.0 <commitId>

La clé <commitId> est fournie par la commande git log

Afficher les liste des tags :

git tag -l

Pousser tous les tag sur Origin:

git push --tags

Modifier un tag existant: [https://stackoverflow.com/questions/1028649/how-do-you-rename-a-git-tag]

git tag new old

git tag -d old

git push origin :refs/tags/old

git push –tags

Git push

git push mets à jour un repository autre :

git push <chemin repository>

ou

git push --set-upstream <chemin repository> master

Serveur GIT

https://git-scm.com/book/fr/v1/Git-sur-le-serveur

On crée un user git groupe git qui sera propriétaire des projets sur le repository distant.

sudo groupadd git
sudo useradd -g git git
sudo -i
passwd git

Dans le fichier .git/config des utilisateurs on aura :

[remote "origin"] 
url = git@< server>:/anywhere/GITs/< project>.git 
fetch = +refs/heads/*:refs/remotes/origin/* 
push = master fetch = master 

Les 'commiters' devront être dans le groupe git afin d'avoir les droits de 'push'.

sudo usermod -a -G git <user>

Git branch

https://www.atlassian.com/git/tutorials/using-branches/git-branch

Liste des branches existantes :

git branch

Créer une nouvelle branche :

git branch <new-feature>

Utiliser la nouvelle branche :

git checkout <new-feature>

Les deux en un (Créer une branche et l'utiliser) :

git checkout -b <new-branch>

Ajout de modifications :

git add <file>

git commit -m “Started work on a new feature”

… plusieurs fois …

Git Merge

Pour les workflow en “branche” (Feature Branch Workflow). Les développers ne travaillent que sur des branches. On ne merge pas immédiatement les branches sur le master

Ce workflow est utilisé pour l'intégration continue.

Avant de merger :

git checkout master

Effectuer le merge de la branche new-feature créée précédemment:

git merge <new-feature>

Correction de conflits éventuels …

git add …. git commit …

Mettre à jour l'origine en sans conserver la branche :

git push origin master

Mettre à jour l'origine en y conservant la branche (option: -u) :

git push -u origin master

A la fin on peut merger la branche sur origin :

git checkout master
git pull
git pull origin <new-feature>
git push

Git Rebase

Pour les workflows “centralisés”. Garantir que le master de l'origin est toujours à jour et cohérent. Les développements se font dans des branches dédiées en local et que c'est OK on envoi sur le master de l'origin.

Avant de merger :

git pull --rebase origin master

Les conflits éventuels sont signalés.

git status

Après correction de conflits :

git rebase --continue

Si on veut arreter “rebase” en cours :

git rebase --abort

Mettre à jour l'origine:

git push origin master

Git stash

git stash permet de mettre de coté un état local (sorte de commit local uniquement).

hal:/data/test2 $ echo "Test stash..." > test.txt 

hal:/data/test2 $ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

hal:/data/test2 $ git stash
Saved working directory and index state WIP on master: a4fcdc4 Bla bla ..2 ..
HEAD is now at a4fcdc4 Bla bla ..2 ..

hal:/data/test2 $ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

Pour récupérer le contenu du “stash” :

hal:/data/test2 $ git stash pop
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (97b2a8477f7eac602cec04d3191cac3b2b247bdb)

On peut aussi empliler les stash :

hal:/data/test2 $ echo "Test stash 2..." > test.txt 
hal:/data/test2 $ git stash 
Saved working directory and index state WIP on master: a4fcdc4 Bla bla ..2 ..
HEAD is now at a4fcdc4 Bla bla ..2 ..

hal:/data/test2 $ echo "Test stash 3..." > test.txt 
hal:/data/test2 $ git stash 
Saved working directory and index state WIP on master: a4fcdc4 Bla bla ..2 ..
HEAD is now at a4fcdc4 Bla bla ..2 ..

hal:/data/test2 $ git stash list
stash@{0}: WIP on master: a4fcdc4 Bla bla ..2 ..
stash@{1}: WIP on master: a4fcdc4 Bla bla ..2 ..
hal:/data/test2 $ 

# A la fin on peut supprimer les stashs :

hal:/data/test2 $ git stash drop stash@{1}
Dropped stash@{1} (18d40066b10557b8551ac28b7f96c2d1ceb8b23d)
hal:/data/test2 $ git stash drop stash@{0}
Dropped stash@{0} (9d7208791ae7de2a2af1ba0a79532008ac128786)

SOS

Afficher la liste des fichiers d'un projet :

git ls-tree --full-tree -r HEAD

Suppression définitive d'éléments :

http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-git-repo

Récupérer uniquement quelques fichiers :

git checkout <commit> <file>

Normalement Git ne supprime pas de commit, donc si on est perdu :

git reflog affiche la liste des commits.

On peut alors revenir sur un commit particulier avec :

git reset --hard <mon-commit>

https://stackoverflow.com/questions/424071/how-to-list-all-the-files-in-a-commit

If you want to get list of changed files:

git diff-tree --no-commit-id --name-only -r <commit-hash>

If you want to get list of all files in a commit, you can use

git ls-tree --name-only -r <commit-hash>

Exemple


#--------------------------------------------------------------
# Configuration de Git
#--------------------------------------------------------------

hal:/data/Test-Git $ cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[branch "master"]
	remote = /bkp/GITs/Test-Git
	merge = refs/heads/master
[remote "origin"]
	url = /bkp/GITs/Test-Git/
	fetch = +refs/heads/*:refs/remotes/origin/*
	push = master
	fetch = master


#--------------------------------------------------------------
# Création du dossier de travail avec initialisation Git
#--------------------------------------------------------------
hal:/data $ git init Test-Git
Initialized empty Git repository in /media/data/Test-Git/.git/

#--------------------------------------------------------------
# Création du dossier de référence avec initialisation Git --bare
#--------------------------------------------------------------
hal:/data $ cd /bkp/GITs/
hal:/bkp/GITs $ git init Test-Git --bare
Initialized empty Git repository in /media/bkp/GITs/Test-Git/

hal:/bkp/GITs $ cd -
/media/data
hal:/data $ cd Test-Git/
hal:/data/Test-Git $ echo "v1" > test.txt
hal:/data/Test-Git $ ll
total 8
drwxr-xr-x 7 roge roge 4096 Nov  9 09:08 .git
-rw-r--r-- 1 roge roge    3 Nov  9 09:10 test.txt

#--------------------------------------------------------------
# Status
#--------------------------------------------------------------
hal:/data/Test-Git $ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	test.txt

nothing added to commit but untracked files present (use "git add" to track)

#--------------------------------------------------------------
# Ajout dans Git
#--------------------------------------------------------------
hal:/data/Test-Git $ git add *

hal:/data/Test-Git $ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   test.txt

#--------------------------------------------------------------
# Commit
#--------------------------------------------------------------
hal:/data/Test-Git $ git commit -m "v1"
[master (root-commit) 95defef] v1
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# Vérification
hal:/data/Test-Git $ git log
2016-11-09 12:38  (HEAD -> master) dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1

#--------------------------------------------------------------
# Mise à jour du repository de reference
#--------------------------------------------------------------

hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ master
Counting objects: 3, done.
Writing objects: 100% (3/3), 197 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /bkp/GITs/Test-Git/
 * [new branch]      master -> master

# Vérification
hal:/data/Test-Git $ cd /bkp/GITs/Test-Git/
hal:/bkp/GITs/Test-Git $ git log
2016-11-09 12:38  (HEAD -> master) dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1

#--------------------------------------------------------------
# Modification du fichier et commit
#--------------------------------------------------------------

hal:/data/Test-Git $ echo "v1.1" > test.txt

hal:/data/Test-Git $ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

hal:/data/Test-Git $ git add *

hal:/data/Test-Git $ git commit -m "v1.1"
[master dd4b48d] v1.1
 1 file changed, 1 insertion(+), 1 deletion(-)

hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ master
Counting objects: 3, done.
Writing objects: 100% (3/3), 228 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /bkp/GITs/Test-Git/
   95defef..dd4b48d  master -> master
   
hal:/data/Test-Git $ git log
2016-11-09 12:38  (HEAD -> master) dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1

#--------------------------------------------------------------
# 3ième modification du fichier
#--------------------------------------------------------------

hal:/data/Test-Git $ echo "V1.2" > test.txt 
hal:/data/Test-Git $ git add *
hal:/data/Test-Git $ git commit -m "V1.2"
[master f9239f9] V1.2
 1 file changed, 1 insertion(+), 1 deletion(-)

hal:/data/Test-Git $ git push --set-upstream /bkp/GITs/Test-Git master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /bkp/GITs/Test-Git
   dd4b48d..f9239f9  master -> master
Branch master set up to track remote branch master from /bkp/GITs/Test-Git.

#--------------------------------------------------------------
# Création d'une branche
#--------------------------------------------------------------

hal:/data/Test-Git $ git checkout -b new-feature master
Switched to a new branch 'new-feature'

#--------------------------------------------------------------
# Création de changements 
#--------------------------------------------------------------

hal:/data/Test-Git $ echo "V1.3.0" > test.txt 
hal:/data/Test-Git $ git add *
hal:/data/Test-Git $ git commit -m "start new feature"
[new-feature f37b89e] start new feature
 1 file changed, 1 insertion(+), 1 deletion(-)

hal:/data/Test-Git $ echo "V1.3.1" > test.txt 
hal:/data/Test-Git $ git add *
hal:/data/Test-Git $ git commit -m "End new feature"
[new-feature 06f6e84] End new feature
 1 file changed, 1 insertion(+), 1 deletion(-)

hal:/data/Test-Git $ git log
2016-11-09 13:15  (HEAD -> new-feature) 06f6e84 roge End new feature
2016-11-09 13:14  f37b89e roge start new feature
2016-11-09 13:02  (master) 58f89b5 roge V1.2.2
2016-11-09 13:02  71f0700 roge V1.2.1
2016-11-09 12:56  (test-feature) f9239f9 roge V1.2
2016-11-09 12:38  dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1

#--------------------------------------------------------------
# Merge: test-feature --> master
#--------------------------------------------------------------

hal:/data/Test-Git $ git checkout master
Switched to branch 'master'
hal:/data/Test-Git $ git merge new-feature
Updating 58f89b5..06f6e84
Fast-forward
 test.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

# Suppression de la branche
hal:/data/Test-Git $ git branch -d new-feature
Deleted branch new-feature (was 06f6e84).

hal:/data/Test-Git $ git log
2016-11-09 13:15  (HEAD -> master) 06f6e84 roge End new feature
2016-11-09 13:14  f37b89e roge start new feature
2016-11-09 13:02  58f89b5 roge V1.2.2
2016-11-09 13:02  71f0700 roge V1.2.1
2016-11-09 12:56  (test-feature) f9239f9 roge V1.2
2016-11-09 12:38  dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1

#--------------------------------------------------------------
# Mise à jour du repository de reference
#--------------------------------------------------------------

hal:/data/Test-Git $ git push /bkp/GITs/Test-Git/ master
Counting objects: 12, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (12/12), 852 bytes | 0 bytes/s, done.
Total 12 (delta 0), reused 0 (delta 0)
To /bkp/GITs/Test-Git/
   f9239f9..06f6e84  master -> master

# Vérification
2016-11-09 13:15  (HEAD -> master) 06f6e84 roge End new feature
2016-11-09 13:14  f37b89e roge start new feature
2016-11-09 13:02  58f89b5 roge V1.2.2
2016-11-09 13:02  71f0700 roge V1.2.1
2016-11-09 12:56  f9239f9 roge V1.2
2016-11-09 12:38  dd4b48d roge v1.1
2016-11-09 09:10  95defef roge v1