Gunakan git rebase --interactive
untuk mengedit komit sebelumnya, jalankan git reset HEAD~
, lalu git add -p
tambahkan beberapa, lalu buat komit, lalu tambahkan lagi dan buat komit lain, sebanyak yang Anda suka. Setelah selesai, jalankan git rebase --continue
, dan Anda akan memiliki semua komit sebelumnya di tumpukan Anda.
Penting : Perhatikan bahwa Anda dapat bermain-main dan membuat semua perubahan yang Anda inginkan, dan tidak perlu khawatir kehilangan perubahan lama, karena Anda selalu dapat menjalankan git reflog
untuk menemukan titik di proyek Anda yang berisi perubahan yang Anda inginkan, (sebut saja a8c4ab
) , lalu git reset a8c4ab
.
Berikut serangkaian perintah untuk menunjukkan cara kerjanya:
mkdir git-test; cd git-test; git init
sekarang tambahkan file A
vi A
tambahkan baris ini:
one
git commit -am one
kemudian tambahkan baris ini ke A:
two
git commit -am two
kemudian tambahkan baris ini ke A:
three
git commit -am three
sekarang file A terlihat seperti ini:
one
two
three
dan git log
penampilan kami seperti berikut (well, saya gunakangit 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
Katakanlah kita ingin membagi komit kedua two
,.
git rebase --interactive HEAD~2
Ini memunculkan pesan yang terlihat seperti ini:
pick 2b613bc two
pick bfb8e46 three
Ubah yang pertama pick
menjadi yang e
mengedit komit itu.
git reset HEAD~
git diff
menunjukkan kepada kami bahwa kami baru saja membatalkan komitmen yang kami buat untuk komitmen kedua:
diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two
Mari tahap perubahan itu, dan tambahkan "dan yang ketiga" ke baris dalam file A
.
git add .
Ini biasanya merupakan titik selama rebase interaktif tempat kami menjalankan git rebase --continue
, karena kami biasanya hanya ingin kembali ke tumpukan komit untuk mengedit komit sebelumnya. Tapi kali ini, kami ingin membuat komitmen baru. Jadi kita akan lari git commit -am 'two and a third'
. Sekarang kita edit file A
dan tambahkan baris two and two thirds
.
git add .
git commit -am 'two and two thirds'
git rebase --continue
Kami memiliki konflik dengan komit kami three
, jadi mari kita selesaikan:
Kami akan berubah
one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three
untuk
one
two and a third
two and two thirds
three
git add .; git rebase --continue
Sekarang git log -p
penampilan kami seperti ini:
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