Użyj git rebase --interactivedo edycji tego wcześniejszego zatwierdzenia, uruchom git reset HEAD~, a następnie git add -pdodaj niektóre, następnie dokonaj zatwierdzenia, następnie dodaj kolejne i dokonaj kolejnego zatwierdzenia, tyle razy, ile chcesz. Kiedy skończysz, uruchom git rebase --continue, a będziesz miał wszystkie zatwierdzenia podziału wcześniej na swoim stosie.
Ważne : pamiętaj, że możesz się pobawić i wprowadzić wszystkie potrzebne zmiany i nie musisz się martwić utratą starych zmian, ponieważ zawsze możesz uruchomić, git reflogaby znaleźć punkt w projekcie, który zawiera żądane zmiany (nazwijmy to a8c4ab) , a następnie git reset a8c4ab.
Oto seria poleceń pokazujących, jak to działa:
mkdir git-test; cd git-test; git init
teraz dodaj plik A
vi A
dodaj tę linię:
one
git commit -am one
następnie dodaj ten wiersz do A:
two
git commit -am two
następnie dodaj ten wiersz do A:
three
git commit -am three
teraz plik A wygląda następująco:
one
two
three
i nasze git logwygląda następująco (cóż, używamgit log --pretty=oneline --pretty="%h %cn %cr ---- %s"
bfb8e46 Rose Perrone 4 seconds ago ---- three
2b613bc Rose Perrone 14 seconds ago ---- two
9aac58f Rose Perrone 24 seconds ago ---- one
Powiedzmy, że chcemy podzielić drugi popełnić two.
git rebase --interactive HEAD~2
Spowoduje to wyświetlenie następującego komunikatu:
pick 2b613bc two
pick bfb8e46 three
Zmień pierwszy pickna, eaby edytować zatwierdzenie.
git reset HEAD~
git diff pokazuje nam, że właśnie przeprowadziliśmy inscenizację zatwierdzenia dokonanego dla drugiego zatwierdzenia:
diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two
Dokonajmy tej zmiany i dodajmy „i trzeci” do tego wiersza w pliku A.
git add .
Zazwyczaj jest to punkt podczas interaktywnego rebase, w którym działamy git rebase --continue, ponieważ zwykle chcemy po prostu wrócić do naszego stosu zmian, aby edytować wcześniejsze zatwierdzenie. Ale tym razem chcemy stworzyć nowe zatwierdzenie. Więc uciekniemy git commit -am 'two and a third'. Teraz edytujemy plik Ai dodajemy linię two and two thirds.
git add .
git commit -am 'two and two thirds'
git rebase --continue
Mamy konflikt z naszym zatwierdzeniem three, więc rozwiążmy go:
Zmienimy się
one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three
do
one
two and a third
two and two thirds
three
git add .; git rebase --continue
Teraz git log -pwygląda to tak:
commit e59ca35bae8360439823d66d459238779e5b4892
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 13:57:00 2013 -0700
three
diff --git a/A b/A
index 5aef867..dd8fb63 100644
--- a/A
+++ b/A
@@ -1,3 +1,4 @@
one
two and a third
two and two thirds
+three
commit 4a283ba9bf83ef664541b467acdd0bb4d770ab8e
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 14:07:07 2013 -0700
two and two thirds
diff --git a/A b/A
index 575010a..5aef867 100644
--- a/A
+++ b/A
@@ -1,2 +1,3 @@
one
two and a third
+two and two thirds
commit 704d323ca1bc7c45ed8b1714d924adcdc83dfa44
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 14:06:40 2013 -0700
two and a third
diff --git a/A b/A
index 5626abf..575010a 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two and a third
commit 9aac58f3893488ec643fecab3c85f5a2f481586f
Author: Rose Perrone <roseperrone@fake.com>
Date: Sun Jul 7 13:56:40 2013 -0700
one
diff --git a/A b/A
new file mode 100644
index 0000000..5626abf
--- /dev/null
+++ b/A
@@ -0,0 +1 @@
+one