Различия между версиями 2 и 4 (по 2 версиям)
Версия 2 от 2019-03-29 09:07:54
Размер: 518
Редактор: FrBrGeorge
Комментарий:
Версия 4 от 2019-03-29 12:01:33
Размер: 2670
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 5: Строка 5:
george@inspiron:~/src/gitadd-p> cal > month    george@inspiron:~/src/gitadd-p> git init
george@inspiron:~/src/gitadd-p> cal > month
Строка 8: Строка 9:
george@inspiron:~/src/gitadd-p> git add .
george@inspiron:~/src/gitadd-p> git commit -a -m "Initial"
[master (root-commit) 6b5e406] Initial
 3 files changed, 50 insertions(+)
 create mode 100644 3months
 create mode 100644 month
 create mode 100644 year
Строка 11: Строка 19:
{{attachment:3files.png}}  . {{attachment:3files.png}}
Строка 14: Строка 22:
 . {{attachment:monthD.png}}
 . {{attachment:3montrsD.png}}
 . {{attachment:yearD.png}}
 * `month`:
  . {{attachment:monthD.png}}
 * `3months`:
  . {{attachment:3montrsD.png}}
 * `year`:
  . {{attachment:yearD.png}}

Что покажет `git diff`:
{{{#!sh
george@inspiron:~/src/gitadd-p> git diff
}}}
  . {{attachment:gitdiff.png}}
 * В этом diff-е несколько ханков, каждый начинается (воображаемой) командой `diff --git`, которая сравнивает два (воображаемых) каталога `a` (предыдущее состояние) `b` (текущее). А файлы в этих каталогах настоящие.
 * Дальше `--- a/` отмечает, как файл назывался раньше, а `+++ b/` — как он называется после изменения (например, его ещё и переименовали при этом)
 * Затем '@@@' описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)
 * После чего показаны изменившиеся части файла в окружении ''неизменившихся''(т. н. контексте). Контекст нужен для того, чтобы была возможность применить ханк, даже если соответствующие строки находятся в другом месте файла, например, если мы хотим накатить свой коммит на файл, в котором кто-то за это время сделал свои изменения. `--- ` означает, что было в старом файле, а `+++ ` — что получилось в новом.
[[attachment:patch.txt|Вот здесь]] приложен получившийся патч в текстовом формате.

Как распилить одно большое изменение на несколько коммитов?

Создадим три файла:

george@inspiron:~/src/gitadd-p> git init
george@inspiron:~/src/gitadd-p> cal > month
george@inspiron:~/src/gitadd-p> cal -3 > 3months
george@inspiron:~/src/gitadd-p> cal -y > year
george@inspiron:~/src/gitadd-p> git add . 
george@inspiron:~/src/gitadd-p> git commit -a -m "Initial"
[master (root-commit) 6b5e406] Initial
 3 files changed, 50 insertions(+)
 create mode 100644 3months
 create mode 100644 month
 create mode 100644 year

Общий вид:

  • 3files.png

Отредактируем эти файлы:

  • month:

    • monthD.png

  • 3months:

    • 3montrsD.png

  • year:

    • yearD.png

Что покажет git diff:

george@inspiron:~/src/gitadd-p> git diff
  • gitdiff.png

  • В этом diff-е несколько ханков, каждый начинается (воображаемой) командой diff --git, которая сравнивает два (воображаемых) каталога a (предыдущее состояние) b (текущее). А файлы в этих каталогах настоящие.

  • Дальше --- a/ отмечает, как файл назывался раньше, а +++ b/ — как он называется после изменения (например, его ещё и переименовали при этом)

  • Затем '@@@' описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)
  • После чего показаны изменившиеся части файла в окружении неизменившихся(т. н. контексте). Контекст нужен для того, чтобы была возможность применить ханк, даже если соответствующие строки находятся в другом месте файла, например, если мы хотим накатить свой коммит на файл, в котором кто-то за это время сделал свои изменения. ---  означает, что было в старом файле, а +++  — что получилось в новом.

Вот здесь приложен получившийся патч в текстовом формате.

TODO

FrBrGeorge/Using git add -p (последним исправлял пользователь FrBrGeorge 2024-03-12 13:12:09)