Sie sollten den Index verwenden. Fügen Sie nach einem gemischten Reset (" git reset HEAD ^") die ersten Änderungen in den Index ein und schreiben Sie sie fest. Dann legen Sie den Rest fest.
Mit " git add " können Sie alle in einer Datei vorgenommenen Änderungen in den Index einfügen. Wenn Sie nicht jede in einer Datei vorgenommene Änderung vornehmen möchten, sondern nur einige, können Sie "git add -p" verwenden.
Sehen wir uns ein Beispiel an. Nehmen wir an, ich hätte eine Datei namens myfile, die den folgenden Text enthält:
something
something else
something again
Ich habe es in meinem letzten Commit so geändert, dass es jetzt so aussieht:
1
something
something else
something again
2
Jetzt entscheide ich, dass ich es in zwei Teile teilen möchte, und ich möchte, dass die Einfügung der ersten Zeile im ersten Commit und das Einfügen der letzten Zeile im zweiten Commit erfolgt.
Zuerst gehe ich zurück zu HEADs Eltern, aber ich möchte die Änderungen im Dateisystem beibehalten, also verwende ich "git reset" ohne Argument (was einen sogenannten "gemischten" Reset bewirkt):
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
Jetzt benutze ich "git add -p", um die Änderungen, die ich in den Index übernehmen möchte, hinzuzufügen (= ich stelle sie bereit). "git add -p" ist ein interaktives Tool, das Sie fragt, welche Änderungen an der Datei vorgenommen werden sollen, wenn sie dem Index hinzugefügt werden.
$ 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
Dann begebe ich diese erste Änderung:
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
Jetzt kann ich alle anderen Änderungen übernehmen (nämlich die in die letzte Zeile eingegebene Ziffer "2"):
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
Lassen Sie uns das Protokoll überprüfen, um festzustellen, welche Commits wir haben:
$ 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
git reset [--patch|-p] <commit>
, mit dem Sie sich die Mühe ersparen können, die Siegit add -p
nach dem Zurücksetzen benötigen. Habe ich recht? Verwenden von git 1.7.9.5.