git: branch

Ветвление

— возможность создания независимой от основной линии разрабоки.
По умолчанию имя основной ветки в git — master.
HEAD — это указатель на локальную ветку в которой мы сейчас находимся.
Когда делается коммит, то получаем основную ветку указывающую на предыдущий коммит. Каждый коммит двигает автоматически данный указатель вперед.

Основы ветвления

git branch — показать список веток
git branch -v — показать список веток с последними коммитами в этих ветках
git branch [new_branch_name] — создать новую ветку
git branch -d [branch_name] — удалить ветку
git checkout [branch_name] — переключиться в ветку. Данная команда перемещает указатель HEAD и возвращает файлы в то состояние, которое соответствовало тому коммиту, куда переключились.
Эти две команды можно заменить одной:
git checkout -b [new_branch_name] — создаёт новую ветку и переключается в неё
git log --oneline --graph --all — показать историю ветвления коммитов

Рассмотрим пример по созданию двух веток и переключению между ними

Создадим папку проекта и инициализируем git
mkdir branch-sample
cd branch-sample
git init

Создадим файл, индексируем и коммитем
echo testFile > masterbranch.txt
git add masterbranch.txt 
git commit -m 'masterbranch commit comment'

Осуществим еще один коммит master ветки
echo "new line" >> masterbranch.txt
git commit -a -m 'second masterbranch commit comment'

Создадим еще одеу ветку testline, создадим еще один файл и закоммитем
git checkout -b testline
echo "new file testline" > testline.txt
git add testline.txt 
git commit -m 'first testline commit comment'

Переключаемся в master ветку, создаём файл и коммитем
git checkout master
touch masterbranch2.txt
git add  masterbranch2.txt
git commit -m "3 masterbranch2 commit comment"

Смотрим результат
git log --oneline --decorate --all --graph 
* ae620a0 (HEAD -> master) 3 masterbranch2 commit comment
| * f6df9d7 (testline) first testline commit comment
|/  
* 4fcbb51 second masterbranch commit comment
* 9189298 masterbranch commit comment

Cлияние

Для того чтоб выполнить слияние необходимо переключиться в ту ветку в которую хотим включить изменения и выполнить команду git merge — трехстороннее слияние (если это не fast forward) между двумя последними снимками сливаемых веток и самого недавнего общего для этих веток родительского снимка.
git merge [branch_name] — слияние веток

Делаем слияние
git merge testline

Смотрим
git log --oneline --decorate --all --graph
*   e7571d0 (HEAD -> master) Merge branch 'testline'
|\  
| * f6df9d7 (testline) first testline commit comment
* | ae620a0 3 masterbranch2 commit comment
|/  
* 4fcbb51 second masterbranch commit comment
* 9189298 masterbranch commit comment

Удаляем ветку testline
git branch -d testline 
Deleted branch testline (was f6df9d7).

Смотрим
git log --oneline --decorate --all --graph
*   e7571d0 (HEAD -> master) Merge branch 'testline'
|\  
| * f6df9d7 first testline commit comment
* | ae620a0 3 masterbranch2 commit comment
|/  
* 4fcbb51 second masterbranch commit comment
* 9189298 masterbranch commit comment

Перемещение

Это второй способ объединения веток. Перемещение берет изменения одной ветки и накатывает поверх другой ветки в порядке в котором эти изменения делались, а затем накатываются изменения уже текущей ветки.
git rebase [branch_name]
Не перемещайте коммиты, уже отправленные в публичный репозиторий.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *