Как разделить последнюю фиксацию на два в Мерзавце

В C#:

public static Color Lighten(Color inColor, double inAmount)
{
  return Color.FromArgb(
    inColor.A,
    (int) Math.Min(255, inColor.R + 255 * inAmount),
    (int) Math.Min(255, inColor.G + 255 * inAmount),
    (int) Math.Min(255, inColor.B + 255 * inAmount) );
}

я использовал это повсеместно.

276
задан Jakub Arnold 17 September 2009 в 05:53
поделиться

4 ответа

Вам следует использовать индекс. После выполнения смешанного сброса (" git reset HEAD ^") добавьте первый набор изменений в индекс, затем зафиксируйте их. Затем зафиксируйте отдых.

Вы можете использовать « git add », чтобы поместить все изменения, сделанные в файле, в индекс. если ты не хотите инсценировать каждую модификацию файла, только некоторые из них, вы можно использовать "git add -p".

Давайте посмотрим на пример. Предположим, у меня есть файл myfile, который содержит следующий текст:

something
something else
something again

Я изменил его в своей последней фиксации, так что теперь он выглядит так:

1
something
something else
something again
2

Теперь я решил, что хочу разделить его на две части, и хочу, чтобы первая строка будет в первой фиксации, а вставка последней строки будет во втором коммите.

Сначала я возвращаюсь к родительскому элементу HEAD, но хочу сохранить изменения в файловой системе, поэтому я использую "git reset" без аргументов (что будет делать так называемый "смешанный" reset):

$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2

Теперь я использую "git add -p", чтобы добавить изменения, которые я хочу зафиксировать в индексе (= I поставить их). "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
330
ответ дан 23 November 2019 в 02:06
поделиться

Чтобы изменить текущую фиксацию на две фиксации, вы можете сделать что-то вроде следующего:

Либо:

git reset --soft HEAD^

Это отменяет последнюю фиксацию, но оставляет все в постановке. Затем вы можете деактивировать определенные файлы:

git reset -- file.file

При желании переустановить части этих файлов:

git add -p file.file

Сделать новую первую фиксацию:

git commit

Этап и зафиксировать остальные изменения во второй фиксации:

git commit -a

Или:

Отменить и деактивировать все изменения из последней фиксации:

git reset HEAD^

Выборочно выполнить первый раунд изменений:

git add -p

Фиксация:

git commit

Зафиксировать остальные изменения:

git commit -a

(На любом этапе, если вы отменили коммит, который добавил новый файл и вы хотите добавить его во вторую фиксацию, вам придется вручную добавить его как commit -a только этапы изменения в уже отслеженных файлах.)

52
ответ дан 23 November 2019 в 02:06
поделиться

Запустите git gui , выберите переключатель «Изменить последнюю фиксацию» и отмените этап (Фиксация> Отключить от фиксации или Ctrl - ] U ) изменения, которые вы не хотите вводить в первую фиксацию. Я думаю, что это самый простой способ сделать это.

Еще одна вещь, которую вы можете сделать, - это выбрать изменение без фиксации ( git cherry-pick -n ), а затем вручную или с помощью git gui выберите желаемые изменения перед фиксацией.

22
ответ дан 23 November 2019 в 02:06
поделиться
git reset HEAD^

--hard убивает ваши изменения.

15
ответ дан 23 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: