Vous devez utiliser l'index. Après avoir effectué une réinitialisation mixte (" git reset HEAD^"), ajoutez la première série de changements dans l'index, puis les commiter. Ensuite, livrez le le reste.
Vous pouvez utiliser " git add "pour placer toutes les modifications apportées à un fichier dans l'index. Si vous ne voulez pas mettre en scène toutes les modifications faites dans un fichier, seulement certaines d'entre elles, vous vous pouvez utiliser "git add -p".
Voyons un exemple. Supposons que j'ai un fichier appelé monfichier, qui contient le texte suivant :
something
something else
something again
Je l'ai modifié dans mon dernier commit pour qu'il ressemble maintenant à ceci :
1
something
something else
something again
2
Maintenant je décide que je veux le diviser en deux, et je veux que l'insertion de la première ligne soit dans le premier commit, et que l'insertion de la dernière ligne soit dans le second commit.
D'abord je retourne au parent de HEAD, mais je veux garder les modifications dans le système de fichiers, donc j'utilise "git reset" sans argument (ce qui fera une réinitialisation dite "mixte"). mixte) :
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
Maintenant, j'utilise "git add -p" pour ajouter les changements que je veux commiter à l'index (=J'ai les mettre en scène). "git add -p" est un outil interactif qui vous demande quelles sont les modifications du fichier qu'il doit ajouter à l'index.
$ git add -p myfile
diff --git a/myfile b/myfile
index 93db4cb..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,5 @@
+1
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,s,e,?]? s # split this section into two!
Split into 2 hunks.
@@ -1,3 +1,4 @@
+1
something
something else
something again
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? y # yes, I want to stage this
@@ -1,3 +2,4 @@
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,K,g,e,?]? n # no, I don't want to stage this
Ensuite, j'effectue ce premier changement :
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
Maintenant je peux valider tous les autres changements (notamment le chiffre "2" mis dans la dernière ligne) :
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
Vérifions le journal pour voir quels commits nous avons :
$ git log -p -n2 | cat
Commit 5e284e652f5e05a47ad8883d9f59ed9817be59d8
Author: ...
Date: ...
Added last line
Diff --git a/myfile b/myfile
Index f9e1a67..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -2,3 +2,4 @@
something
something else
something again
+2
Commit cef3d4e0298dd5d279a911440bb72d39410e7898
Author: ...
Date: ...
Added first line
Diff --git a/myfile b/myfile
Index 93db4cb..f9e1a67 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,4 @@
+1
something
something else
something again