Вам слід використовувати індекс. Зробивши змішане скидання (" git reset HEAD ^"), додайте в індекс перший набір змін, а потім виконайте їх. Потім зробіть решту.
Ви можете використовувати " git add ", щоб внести всі зміни, внесені у файл до індексу. Якщо ви не хочете поетапно проводити будь-які зміни, внесені у файл, лише деякі з них, ви можете використовувати "git add -p".
Подивимось приклад. Припустимо, у мене був файл з назвою myfile, який містить такий текст:
something
something else
something again
Я змінив його в останньому фіксації, щоб тепер він виглядав так:
1
something
something else
something again
2
Тепер я вирішую, що хочу розділити його на два, і я хочу, щоб вставка першого рядка була в першому коміті, а вставка останнього рядка - у другому.
Спочатку я повертаюся до батьківського HEAD, але хочу зберегти зміни у файловій системі, тому я використовую "git reset" без аргументів (що дозволить зробити так званий "змішаний" скидання):
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
Тепер я використовую "git add -p", щоб додати зміни, які хочу ввести в індекс (= я їх статую). "git add -p" - це інтерактивний інструмент, який запитує вас про те, які зміни у файлі слід додати до індексу.
$ 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
Тоді я здійснюю цю першу зміну:
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
Тепер я можу вчинити всі інші зміни (а саме цифру "2", поставлену в останньому рядку):
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
Давайте перевіримо журнал, щоб побачити, що ми маємо:
$ 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>
яку ви можете використати, щоб врятувати вам проблемиgit add -p
після скидання. Маю рацію? Використання git 1.7.9.5.