diff --git a/book/03-git-branching/sections/basic-branching-and-merging.asc b/book/03-git-branching/sections/basic-branching-and-merging.asc index fef93f19..b088bb5a 100644 --- a/book/03-git-branching/sections/basic-branching-and-merging.asc +++ b/book/03-git-branching/sections/basic-branching-and-merging.asc @@ -4,7 +4,7 @@ Ваша работа построена так: . Вы работаете над сайтом. -. Вы создаете ветку для новой статьи, которую вы пишете. +. Вы создаете ветку для реализации новой функциональности в соответствии с пользовательской историей. . Вы работаете в этой ветке. В этот момент вы получаете сообщение, что обнаружена критическая ошибка, требующая скорейшего исправления. @@ -12,8 +12,8 @@ . Переключиться на основную ветку. . Создать ветку для добавления исправления. -. После тестирования слить ветку содержащую исправление с основной веткой. -. Переключиться назад в ту ветку, где вы пишете статью и продолжить работать. +. После тестирования слить ветку, содержащую исправление, с основной веткой. +. Переключиться назад в ветку для реализации пользовательской истории и продолжить работать. [[r_basic_branching]] ==== Основы ветвления @@ -24,7 +24,7 @@ .Простая история коммитов image::images/basic-branching-1.png["Простая история коммитов"] -Вы решаете, что теперь вы будете заниматься проблемой #53 из вашей системы отслеживания ошибок. +Вы выбрали задачу #53 из какая-там-у-вас-система-отслеживания-задач. Чтобы создать ветку и сразу переключиться на неё, можно выполнить команду `git checkout` с параметром `-b`: [source,console] @@ -33,7 +33,7 @@ $ git checkout -b iss53 Switched to a new branch "iss53" ---- -Это то же самое что и: +Это то же самое, что и: [source,console] ---- @@ -44,7 +44,7 @@ $ git checkout iss53 .Создание нового указателя ветки image::images/basic-branching-2.png["Создание нового указателя ветки"] -Вы работаете над своим сайтом и делаете коммиты. +Вы работаете над сайтом и делаете коммиты. Это приводит к тому, что ветка `iss53` движется вперед, так как вы переключились на неё ранее (`HEAD` указывает на неё). [source,console] @@ -53,16 +53,15 @@ $ vim index.html $ git commit -a -m 'Create new footer [issue 53]' ---- -.Ветка iss53 двигается вперед +.Ветка iss53 движется вперед image::images/basic-branching-3.png["Ветка iss53 двигается вперед"] -Тут вы получаете сообщение об обнаружении уязвимости на вашем сайте, которую нужно немедленно устранить. -Благодаря Git, не требуется размещать это исправление вместе с тем, что вы сделали в `iss53`. -Вам даже не придется прилагать усилий, чтобы откатить все эти изменения для начала работы над исправлением. +И тут вы получаете сообщение об обнаружении на сайте уязвимости, и эту уязвимость устранить нужно немедленно. +Благодаря Git вам не придётся ни пытаться реализовать исправление вместе с изменениями, которые вы сделали в ходе разработки `iss53`, ни прилагать усилия для отката этих изменений и возвращения к исходному состоянию перед началом разработки исправления. Все, что вам нужно -- переключиться на ветку `master`. -Но перед тем как сделать это -- имейте в виду, что если рабочий каталог либо индекс содержат незафиксированные изменения, конфликтующие с веткой, на которую вы хотите переключиться, то Git не позволит переключить ветки. -Лучше всего переключаться из чистого рабочего состояния проекта. +Имейте в виду, что если рабочий каталог или индекс содержат незафиксированные изменения, конфликтующие с веткой, на которую вы хотите переключиться, то Git не позволит переключить ветки. +Лучше всего переключаться из чистого рабочего состояния проекта: все изменённые файлы добавить в индекс и сделать коммит. Есть способы обойти это (припрятать изменения (stash) или добавить их в последний коммит (amend)), но об этом мы поговорим позже в разделе <> главы 7. Теперь предположим, что вы зафиксировали все свои изменения и можете переключиться на ветку `master`: @@ -72,12 +71,12 @@ $ git checkout master Switched to branch 'master' ---- -С этого момента ваш рабочий каталог имеет точно такой же вид, какой был перед началом работы над проблемой #53, и вы можете сосредоточиться на работе над исправлением. -Важно запомнить: когда вы переключаете ветки, Git возвращает состояние рабочего каталога к тому виду, какой он имел в момент последнего коммита в эту ветку. +С этого момента ваш рабочий каталог имеет точно такой же вид, какой был перед началом работы над задачей #53, и вы можете сосредоточиться на работе над исправлением. +Важно запомнить: когда вы переключаете ветки, Git возвращает состояние рабочего каталога к тому виду, какой он имел в момент последнего коммита в переключаемую ветку. Он добавляет, удаляет и изменяет файлы автоматически, чтобы состояние рабочего каталога соответствовало тому, когда был сделан последний коммит. Теперь вы можете перейти к написанию исправления. -Давайте создадим новую ветку для исправления, в которой будем работать, пока не закончим исправление. +Давайте создадим новую ветку, в которой реализуем исправление. [source,console] ---- @@ -92,7 +91,7 @@ $ git commit -a -m 'Fix broken email address' .Ветка hotfix основана на ветке `master` image::images/basic-branching-4.png["Ветка hotfix основана на ветке `master`"] -Вы можете прогнать тесты, чтобы убедиться, что ваше исправление делает именно то, что нужно. +Вы можете прогнать тесты, чтобы убедиться, что ваше уязвимость в самом деле исправлена. И если это так -- выполнить слияние ветки `hotfix` с веткой `master` для включения изменений в продукт. Это делается командой `git merge`:(((команды git, merge))) @@ -108,7 +107,7 @@ Fast-forward Заметили фразу «fast-forward» в этом слиянии? Git просто переместил указатель ветки вперед, потому что коммит `C4`, на который указывает слитая ветка `hotfix`, был прямым потомком коммита `C2`, на котором вы находились до этого. -Другими словами, если коммит сливается с тем, до которого можно добраться двигаясь по истории прямо, Git упрощает слияние просто перенося указатель ветки вперед, так как нет расхождений в изменениях. +Другими словами, если коммит сливается с тем, до которого можно добраться, двигаясь по истории вперёд, Git упрощает слияние, просто перенося указатель ветки вперед, потому что в этом случае нет никаких разнонаправленных изменений, которые нужно было бы свести воедино. Это называется «fast-forward». Теперь ваши изменения включены в коммит, на который указывает ветка `master`, и исправление можно внедрять. @@ -116,7 +115,7 @@ Git просто переместил указатель ветки вперед .`master` перемотан до `hotfix` image::images/basic-branching-5.png["`master` перемотан до `hotfix`"] -После внедрения вашего архиважного исправления, вы готовы вернуться к работе над тем, что были вынуждены отложить. +После внедрения вашего архиважного исправления вы готовы вернуться к работе над тем, что были вынуждены отложить. Но сначала нужно удалить ветку `hotfix`, потому что она больше не нужна -- ветка `master` указывает на то же самое место. Для удаления ветки выполните команду `git branch` с параметром `-d`: @@ -126,7 +125,7 @@ $ git branch -d hotfix Deleted branch hotfix (3a0874c). ---- -Теперь вы можете переключиться обратно на ветку `iss53` и продолжить работу над проблемой #53: +Теперь вы можете переключиться обратно на ветку `iss53` и продолжить работу над задачей #53: [source,console] ---- @@ -142,7 +141,7 @@ $ git commit -a -m 'Finish the new footer [issue 53]' image::images/basic-branching-6.png["Продолжение работы над `iss53`"] Стоит обратить внимание на то, что все изменения из ветки `hotfix` не включены в вашу ветку `iss53`. -Если их нужно включить, вы можете влить ветку `master` в вашу ветку `iss53` командой `git merge master`, или же вы можете отложить слияние этих изменений до завершения работы, и затем влить ветку `iss53` в `master`. +Если их нужно включить, вы можете влить ветку `master` в вашу ветку `iss53` командой `git merge master`, а можете отложить слияние этих изменений до завершения работы, и затем влить ветку `iss53` в `master`. [[r_basic_merging]] ==== Основы слияния