« Back
in git squash – read.

git squash.

Dans certain projet communautaire, il vous sera demandé de faire un git squash afin de réunir un ensemble de commit en un seul.

Voici la marche à suivre :

git squash -i HEAD~[NOMBRE DE COMMIT A MODIFIER]

Ensuite la console doit vous afficher quelques chose du genre :

$ git rebase -i HEAD~4
pick 01d1124 Adding license
pick 6340aaa Moving license into its own file
pick ebfd367 Jekyll has become self-aware.
pick 30e0ccb Changed the tagline in the binary, too.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Ici le commit 01d1124 est notre plus vieux commit et le 60709da doit correspondre au commit précédent nos modifications. Si nous voulons réunir les 3 commits suivants le 01d1124 ainsi que lui-même dans un nouveau commit unique il faudra modifier cette affichage comme ceci :

$ git rebase -i HEAD~4
pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.

# Rebase 60709da..30e0ccb onto 60709da
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Une fois ces modifications effectuées vous devez enregistrer votre document et quitter (pour vi :w puis :q ou :wq)

La console va vous afficher la chose suivante :

# This is a combination of 4 commits.
# The first commit's message is:
Adding license

# This is the 2nd commit message:

Moving license into its own file

# This is the 3rd commit message:

Jekyll has become self-aware.

# This is the 4th commit message:

Changed the tagline in the binary, too.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   LICENSE
#    modified:   README.textile
#    modified:   Rakefile
#    modified:   bin/jekyll
#

Vous pouvez par exemple remanier le commentaire comme ceci :

# This is a combination of 4 commits.
# The first commit's message is:
Adding license
Moving license into its own file
Jekyll has become self-aware.
Changed the tagline in the binary, too.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   LICENSE
#    modified:   README.textile
#    modified:   Rakefile
#    modified:   bin/jekyll
#

Voila notre squash est prêt à être utilisé !
Il ne manque plus qu'a le push sur notre branch:

git push --force origin fix-test

Le force est obligatoire ;)

Merci à Laurent Baey pour son aide.

comments powered by Disqus