В 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) );
}
я использовал это повсеместно.
Вам следует использовать индекс. После выполнения смешанного сброса (" 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
Чтобы изменить текущую фиксацию на две фиксации, вы можете сделать что-то вроде следующего:
Либо:
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
только этапы изменения в уже отслеженных файлах.)
Запустите git gui
, выберите переключатель «Изменить последнюю фиксацию» и отмените этап (Фиксация> Отключить от фиксации или Ctrl - ] U ) изменения, которые вы не хотите вводить в первую фиксацию. Я думаю, что это самый простой способ сделать это.
Еще одна вещь, которую вы можете сделать, - это выбрать изменение без фиксации ( git cherry-pick -n
), а затем вручную или с помощью git gui
выберите желаемые изменения перед фиксацией.