72
Комментарий:
|
3088
|
Удаления помечены так. | Добавления помечены так. |
Строка 1: | Строка 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
Общий вид:
Отредактируем эти файлы:
month:
3months:
year:
Что покажет git diff:
george@inspiron:~/src/gitadd-p> git diff
В этом diff-е несколько ханков, каждый начинается (воображаемой) командой diff --git, которая сравнивает два (воображаемых) каталога a (предыдущее состояние) b (текущее). А файлы в этих каталогах настоящие.
Дальше "--- a/" отмечает, как файл назывался раньше, а "+++ b/" — как он называется после изменения (например, его ещё и переименовали при этом)
Затем "@@@" описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)
После чего показаны изменившиеся части файла в окружении неизменившихся(т. н. контексте). Контекст нужен для того, чтобы была возможность применить ханк, даже если соответствующие строки находятся в другом месте файла, например, если мы хотим накатить свой коммит на файл, в котором кто-то за это время сделал свои изменения. "--- " означает, что было в старом файле, а "+++ " — что получилось в новом.
Вот здесь приложен получившийся патч в текстовом формате.
Если сейчас закоммитить все эти изменения, получится один коммит, включающий в себя все три файла. Но предположим, что мы хотим разбить изменения на три коммита (выделение даты в одном файле, подчёркивания в двух и осень в другом).