Differences between revisions 1 and 5 (spanning 4 versions)
Revision 1 as of 2019-03-29 04:45:00
Size: 72
Editor: FrBrGeorge
Comment:
Revision 5 as of 2019-03-29 09:09:45
Size: 3088
Editor: FrBrGeorge
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Содержимое страницы «FrBrGeorge/Using git add -p». = Как распилить одно большое изменение на несколько коммитов? =

Создадим три файла:
{{{#!sh
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
}}}

Общий вид:
 . {{attachment:3files.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/" — как он называется после изменения (например, его ещё и переименовали при этом)

  • Затем "@@@" описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)

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

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

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

FrBrGeorge/Using git add -p (last edited 2019-03-29 10:10:58 by FrBrGeorge)