Учебник по Git


Git и {{название}}


Git Внести


Git Расширенный


Git отменить




Слияние веток Git


Объединить ветки

У нас есть аварийное исправление, поэтому давайте объединим ветки master и Emergency-fix.

Во-первых, нам нужно перейти на ветку master:

Пример

git checkout master
Switched to branch 'master'

Теперь объединяем текущую ветку (master) с Emergency-fix:

Пример

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

Поскольку ветка Emergency-Fix ​​поступила непосредственно от master, и никаких других изменений в master за время нашей работы не вносилось, Git воспринимает это как продолжение master. Таким образом, он может «перемотать вперед», просто указав как мастер, так и аварийное исправление на один и тот же коммит.

Поскольку master и Emergency-Fix ​​теперь практически одинаковы, мы можем удалить Emergency-Fix, так как он больше не нужен:

Пример

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>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

Теперь мы закончили свою работу здесь и можем подготовить и зафиксировать эту ветку:

Пример

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 в 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>This is the first file in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>A new line in our file!</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>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</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