Curriculum
Course: Git
Login
Text lesson

Git Branch Merge

Merge Branches

We have the emergency fix ready, so let’s merge the master and emergency-fix branches.

First, we need to switch to the master branch:

Example

[user@localhost] $

git checkout master
Switched to branch 'master'

Now, merge the current branch (master) with emergency-fix:

Example

[user@localhost] $

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

Since the emergency-fix branch was created directly from master and no other changes were made to master while we worked, Git treats it as a direct continuation of master. It can therefore “fast-forward,” aligning both master and emergency-fix to the same commit.

With master and emergency-fix now being identical, we can delete the emergency-fix branch as it is no longer needed.

Example

[user@localhost] $

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

Merge Conflict

Now, we can switch back to the hello-world-images branch and continue working. Add another image file (img_hello_git.jpg) and update index.html to display it.

Example

[user@localhost] $

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

Example

<!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>

Now that we’ve completed our work, we can stage and commit the changes for this branch.

Example

[user@localhost] $

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

We see that index.html has been modified in both branches. Now we’re ready to merge hello-world-images into master. But what will happen to the recent changes we made in master?

Example

[user@localhost] $
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.

The merge failed due to a conflict between the index.html versions. Let’s check the status:

Example

[user@localhost] $

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 ..." to mark resolution)
both modified: index.html

This confirms there’s a conflict in index.html, but the image files are staged and ready to be committed.

We need to resolve the conflict. Open the file in your editor:

Example

<!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>

We can see the differences between the versions and edit the file as needed:

Example

<!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>

Now we can stage index.html and check the status:

Example

[user@localhost] $

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

The conflict has been resolved, and we can use commit to complete the merge.

Example

[user@localhost] $

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

And delete the hello-world-images branch:

Example

[user@localhost] $

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