НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
Place for your advertisement!
Git. W3Schools українською. Уроки для початківців

En

Git Злиття гілок


Об’єднати гілки

У нас готове аварійне виправлення, тож давайте об’єднаємо головну та аварійно-виправлені гілки.

По-перше, нам потрібно перейти до головної гілки:

Приклад

git checkout master
Switched to branch 'master'

Тепер ми об’єднуємо поточну гілку (master) з аварійним виправленням:

Приклад

git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Оскільки гілка аварійного виправлення надійшла безпосередньо від master, і жодних інших змін до master не було внесено під час нашої роботи, Git розглядає це як продовження master. Таким чином, він може "перемотувати вперед", просто вказуючи як основне, так і аварійне виправлення на той самий комміт.

Оскільки основне та аварійне виправлення тепер по суті однакові, ми можемо видалити аварійне виправлення, оскільки воно більше не потрібне:

Приклад

git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).

Конфлікт злиття

Тепер ми можемо перейти до hello-world-images і продовжити роботу. Додайте інший файл зображення (img_hello_git.jpg) і змініть index.html, щоб він показував його:

Приклад

git checkout hello-world-images
Switched to branch 'hello-world-images'

Приклад

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>Це перший файл у моєму новому Git репозиторію.</p>
<p>Новий рядок у нашому файлі!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

Тепер ми закінчили нашу роботу тут і можемо зробити stage (проміжну стадію) та commit (фіксацію) для цієї гілки:

Приклад

git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
2 files changed, 1 insertion(+)
create mode 100644 img_hello_git.jpg

Ми бачимо, що index.html було змінено в обох гілках. Тепер ми готові об’єднати hello-world-images у master. Але що станеться зі змінами, які ми нещодавно внесли в master?

Приклад

git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Злиття не вдалося, оскільки існує конфлікт між версіями для index.html. Давайте перевіримо статус:

Приклад

git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)

Changes to be committed:
    new file:   img_hello_git.jpg
    new file:   img_hello_world.jpg

Unmerged paths:
(use "git add <file>..." to mark resolution)
    both modified:   index.html

Це підтверджує наявність конфлікту в index.html, але файли зображень готові та підготовлені для фіксації.

Тож нам потрібно вирішити цей конфлікт. Відкрийте файл у нашому редакторі:

Приклад

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>Це перший файл у моєму новому Git репозиторію.</p>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>Новий рядок у нашому файлі!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images

</body>
</html>

Ми можемо бачити відмінності між версіями та редагувати їх, як хочемо:

Приклад

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>Це перший файл у моєму новому Git репозиторію.</p>
<p>Цей рядок тут, щоб показати, як працює злиття.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

Тепер ми можемо створити index.html і перевірити статус:

Приклад

git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)

Changes to be committed:
    new file:   img_hello_git.jpg
    new file:   img_hello_world.jpg
    modified:   index.html

Конфлікт було виправлено, і ми можемо використати commit для завершення злиття:

Приклад

git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts

І видаліть гілку hello-world-images:

Приклад

git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).

Тепер ви краще розумієте, як працюють розгалуження та злиття. Час почати працювати з віддаленим репозиторієм!

Перевірте себе за допомогою вправ

Вправа:

Об’єднайте гілку hello-you із поточною гілкою:

git  hello-you


Place for your advertisement!