Differences between revisions 4 and 5
Revision 4 as of 2019-03-29 09:01:33
Size: 2670
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 35: Line 35:
 * Дальше `--- a/` отмечает, как файл назывался раньше, а `+++ b/` — как он называется после изменения (например, его ещё и переименовали при этом)
 * Затем '@@@' описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)
 * После чего показаны изменившиеся части файла в окружении ''неизменившихся''(т. н. контексте). Контекст нужен для того, чтобы была возможность применить ханк, даже если соответствующие строки находятся в другом месте файла, например, если мы хотим накатить свой коммит на файл, в котором кто-то за это время сделал свои изменения. `--- ` означает, что было в старом файле, а `+++ ` — что получилось в новом.
 * Дальше "`--- a/`" отмечает, как файл назывался раньше, а "`+++ b/`" — как он называется после изменения (например, его ещё и переименовали при этом)
 * Затем "`@@@`" описывает, какие строки файла подверглись изменению (какие откуда удалить и какие куда вставить)
 * После чего показаны изменившиеся части файла в окружении ''неизменившихся''(т. н. контексте). Контекст нужен для того, чтобы была возможность применить ханк, даже если соответствующие строки находятся в другом месте файла, например, если мы хотим накатить свой коммит на файл, в котором кто-то за это время сделал свои изменения. "`--- `" означает, что было в старом файле, а "`+++ `" — что получилось в новом.
Line 40: Line 40:
'''TODO''' Если сейчас закоммитить все эти изменения, получится один коммит, включающий в себя все три файла. Но предположим, что мы хотим разбить изменения на три коммита (выделение даты в одном файле, подчёркивания в двух и осень в другом).

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

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

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)