Skip to content

Commit

Permalink
Merge pull request #468 from Yggaz/patch-1
Browse files Browse the repository at this point in the history
Update basic-branching-and-merging.asc
  • Loading branch information
sadfuzzy committed Jul 21, 2023
2 parents 15489ac + d653631 commit f1c9ebf
Showing 1 changed file with 19 additions and 20 deletions.
39 changes: 19 additions & 20 deletions book/03-git-branching/sections/basic-branching-and-merging.asc
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@
Ваша работа построена так:

. Вы работаете над сайтом.
. Вы создаете ветку для новой статьи, которую вы пишете.
. Вы создаете ветку для реализации новой функциональности в соответствии с пользовательской историей.
. Вы работаете в этой ветке.

В этот момент вы получаете сообщение, что обнаружена критическая ошибка, требующая скорейшего исправления.
Ваши действия:

. Переключиться на основную ветку.
. Создать ветку для добавления исправления.
. После тестирования слить ветку содержащую исправление с основной веткой.
. Переключиться назад в ту ветку, где вы пишете статью и продолжить работать.
. После тестирования слить ветку, содержащую исправление, с основной веткой.
. Переключиться назад в ветку для реализации пользовательской истории и продолжить работать.

[[r_basic_branching]]
==== Основы ветвления
Expand All @@ -24,7 +24,7 @@
.Простая история коммитов
image::images/basic-branching-1.png["Простая история коммитов"]

Вы решаете, что теперь вы будете заниматься проблемой #53 из вашей системы отслеживания ошибок.
Вы выбрали задачу #53 из какая-там-у-вас-система-отслеживания-задач.
Чтобы создать ветку и сразу переключиться на неё, можно выполнить команду `git checkout` с параметром `-b`:

[source,console]
Expand All @@ -33,7 +33,7 @@ $ git checkout -b iss53
Switched to a new branch "iss53"
----

Это то же самое что и:
Это то же самое, что и:

[source,console]
----
Expand All @@ -44,7 +44,7 @@ $ git checkout iss53
.Создание нового указателя ветки
image::images/basic-branching-2.png["Создание нового указателя ветки"]

Вы работаете над своим сайтом и делаете коммиты.
Вы работаете над сайтом и делаете коммиты.
Это приводит к тому, что ветка `iss53` движется вперед, так как вы переключились на неё ранее (`HEAD` указывает на неё).

[source,console]
Expand All @@ -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)), но об этом мы поговорим позже в разделе <<ch07-git-tools#r_git_stashing>> главы 7.
Теперь предположим, что вы зафиксировали все свои изменения и можете переключиться на ветку `master`:

Expand All @@ -72,12 +71,12 @@ $ git checkout master
Switched to branch 'master'
----

С этого момента ваш рабочий каталог имеет точно такой же вид, какой был перед началом работы над проблемой #53, и вы можете сосредоточиться на работе над исправлением.
Важно запомнить: когда вы переключаете ветки, Git возвращает состояние рабочего каталога к тому виду, какой он имел в момент последнего коммита в эту ветку.
С этого момента ваш рабочий каталог имеет точно такой же вид, какой был перед началом работы над задачей #53, и вы можете сосредоточиться на работе над исправлением.
Важно запомнить: когда вы переключаете ветки, Git возвращает состояние рабочего каталога к тому виду, какой он имел в момент последнего коммита в переключаемую ветку.
Он добавляет, удаляет и изменяет файлы автоматически, чтобы состояние рабочего каталога соответствовало тому, когда был сделан последний коммит.

Теперь вы можете перейти к написанию исправления.
Давайте создадим новую ветку для исправления, в которой будем работать, пока не закончим исправление.
Давайте создадим новую ветку, в которой реализуем исправление.

[source,console]
----
Expand All @@ -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)))

Expand All @@ -108,15 +107,15 @@ Fast-forward

Заметили фразу «fast-forward» в этом слиянии?
Git просто переместил указатель ветки вперед, потому что коммит `C4`, на который указывает слитая ветка `hotfix`, был прямым потомком коммита `C2`, на котором вы находились до этого.
Другими словами, если коммит сливается с тем, до которого можно добраться двигаясь по истории прямо, Git упрощает слияние просто перенося указатель ветки вперед, так как нет расхождений в изменениях.
Другими словами, если коммит сливается с тем, до которого можно добраться, двигаясь по истории вперёд, Git упрощает слияние, просто перенося указатель ветки вперед, потому что в этом случае нет никаких разнонаправленных изменений, которые нужно было бы свести воедино.
Это называется «fast-forward».

Теперь ваши изменения включены в коммит, на который указывает ветка `master`, и исправление можно внедрять.

.`master` перемотан до `hotfix`
image::images/basic-branching-5.png["`master` перемотан до `hotfix`"]

После внедрения вашего архиважного исправления, вы готовы вернуться к работе над тем, что были вынуждены отложить.
После внедрения вашего архиважного исправления вы готовы вернуться к работе над тем, что были вынуждены отложить.
Но сначала нужно удалить ветку `hotfix`, потому что она больше не нужна -- ветка `master` указывает на то же самое место.
Для удаления ветки выполните команду `git branch` с параметром `-d`:

Expand All @@ -126,7 +125,7 @@ $ git branch -d hotfix
Deleted branch hotfix (3a0874c).
----

Теперь вы можете переключиться обратно на ветку `iss53` и продолжить работу над проблемой #53:
Теперь вы можете переключиться обратно на ветку `iss53` и продолжить работу над задачей #53:

[source,console]
----
Expand All @@ -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]]
==== Основы слияния
Expand Down

0 comments on commit f1c9ebf

Please sign in to comment.