Use git rebase --interactive
para editar a confirmação anterior, executar git reset HEAD~
e, em seguida, git add -p
adicionar algumas, fazer uma confirmação, adicionar mais algumas e fazer outra confirmação, quantas vezes quiser. Quando terminar, execute git rebase --continue
e você terá todas as confirmações de divisão anteriormente na sua pilha.
Importante : Observe que você pode brincar e fazer todas as alterações desejadas, e não precisa se preocupar em perder alterações antigas, porque sempre é possível executar git reflog
para encontrar o ponto em seu projeto que contém as alterações desejadas (vamos chamá-lo a8c4ab
) e, em seguida git reset a8c4ab
.
Aqui está uma série de comandos para mostrar como funciona:
mkdir git-test; cd git-test; git init
agora adicione um arquivo A
vi A
adicione esta linha:
one
git commit -am one
adicione esta linha a A:
two
git commit -am two
adicione esta linha a A:
three
git commit -am three
agora o arquivo A se parece com isso:
one
two
three
e nossa git log
aparência é a seguinte (bem, eu usogit 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
Digamos que queremos dividir o segundo commit two
,.
git rebase --interactive HEAD~2
Isso traz uma mensagem parecida com esta:
pick 2b613bc two
pick bfb8e46 three
Altere o primeiro pick
para um e
para editar essa confirmação.
git reset HEAD~
git diff
nos mostra que acabamos de desestabilizar o commit que fizemos para o segundo commit:
diff --git a/A b/A
index 5626abf..814f4a4 100644
--- a/A
+++ b/A
@@ -1 +1,2 @@
one
+two
Vamos preparar essa alteração e adicionar "e um terceiro" a essa linha no arquivo A
.
git add .
Normalmente, esse é o ponto durante uma nova reformulação interativa em que executaríamos git rebase --continue
, porque geralmente queremos voltar à nossa pilha de confirmações para editar uma confirmação anterior. Mas desta vez, queremos criar um novo commit. Então vamos correr git commit -am 'two and a third'
. Agora editamos o arquivo A
e adicionamos a linha two and two thirds
.
git add .
git commit -am 'two and two thirds'
git rebase --continue
Temos um conflito com o nosso commit three
, então vamos resolvê-lo:
Nós vamos mudar
one
<<<<<<< HEAD
two and a third
two and two thirds
=======
two
three
>>>>>>> bfb8e46... three
para
one
two and a third
two and two thirds
three
git add .; git rebase --continue
Agora, nossa git log -p
aparência é assim:
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