使用git rebase --interactive
先にコミットすることを編集、実行にgit reset HEAD~
続いて、git add -p
その後、いくつかのより多くの追加や他の好きな回数として、コミット作り、コミット行い、その後、いくつかを追加します。完了したら、を実行するgit rebase --continue
と、スタックの前半にあるすべての分割コミットが得られます。
重要:いつでも実行git reflog
して、必要な変更を含むプロジェクト内のポイントを見つけることができるので、古い変更を失うことを心配する必要はありません(これを呼び出しましょうa8c4ab
)。 、次にgit reset a8c4ab
。
動作を示す一連のコマンドを次に示します。
mkdir git-test; cd git-test; git init
ここでファイルを追加します A
vi A
この行を追加します。
one
git commit -am one
次に、この行をAに追加します。
two
git commit -am two
次に、この行をAに追加します。
three
git commit -am three
ファイルAは次のようになります。
one
two
three
そして私たちの git log
ウェル(以下、Iの使用のように見えますgit 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
2番目のコミットを分割したいとしましょう。 two
。
git rebase --interactive HEAD~2
これにより、次のようなメッセージが表示されます。
pick 2b613bc two
pick bfb8e46 three
最初のものpick
をに変更して、e
そのコミットを編集します。
git reset HEAD~
git diff
2番目のコミットのために行ったコミットのステージングを解除したことを示しています。
diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two
その変更をステージングして、「と3番目」をfileのその行に追加しますA
。
git add .
これは通常、実行する対話型リベース中のポイントです。通常、git rebase --continue
コミットのスタックに戻って以前のコミットを編集したいだけだからです。しかし今回は、新しいコミットを作成したいと思います。したがって、実行しgit commit -am 'two and a third'
ます。次にA
、ファイルを編集して行を追加しますtwo and two thirds
。
git add .
git commit -am 'two and two thirds'
git rebase --continue
コミットと競合しているthree
ので、解決してみましょう。
変わります
one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three
に
one
two and a third
two and two thirds
three
git add .; git rebase --continue
これでgit log -p
次のようになります。
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