Вы должны использовать индекс. После смешанного сброса (« 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.