Git Essential Training
Illustration by John Hersey

Resolving merge conflicts


Git Essential Training

with Kevin Skoglund

Start your free trial now, and begin learning software, business and creative skills—anytime, anywhere—with video instruction from recognized industry experts.

Start Your Free Trial Now

Video: Resolving merge conflicts

In the last movie we learned about merge conflicts, and we actually created one in our Explore California site. That's where we left things off. We left things in the middle of a merge, the merge has not yet been completed, and Git wants us to resolve these conflicts before it will go ahead and complete the merge. What I want us to look at in this movie is how we go about resolving these conflicts. You've three choices as to what to do to resolve these conflicts. First, you can simply abort the merge. You can say oops! That was not what I wanted to do, I was not anticipating all of these problems, get me out of here.
Expand all | Collapse all
  1. 2m 46s
    1. Introduction
      1m 7s
    2. How to use the exercise files
      1m 39s
  2. 19m 44s
    1. Understanding version control
      4m 8s
    2. The history of Git
      7m 58s
    3. About distributed version control
      5m 4s
    4. Who should use Git?
      2m 34s
  3. 26m 12s
    1. Installing Git on a Mac
      3m 44s
    2. Installing Git on Windows
      5m 37s
    3. Installing Git on Linux
      1m 30s
    4. Configuring Git
      7m 29s
    5. Exploring Git auto-completion
      5m 35s
    6. Using Git help
      2m 17s
  4. 15m 49s
    1. Initializing a repository
      1m 58s
    2. Understanding where Git files are stored
      2m 34s
    3. Performing your first commit
      2m 4s
    4. Writing commit messages
      5m 22s
    5. Viewing the commit log
      3m 51s
  5. 17m 44s
    1. Exploring the three-trees architecture
      3m 57s
    2. The Git workflow
      3m 15s
    3. Using hash values (SHA-1)
      4m 7s
    4. Working with the HEAD pointer
      6m 25s
  6. 25m 52s
    1. Adding files
      5m 59s
    2. Editing files
      3m 56s
    3. Viewing changes with diff
      3m 35s
    4. Viewing only staged changes
      2m 28s
    5. Deleting files
      5m 29s
    6. Moving and renaming files
      4m 25s
  7. 19m 18s
    1. Introducing the Explore California web site
      2m 2s
    2. Initializing Git
      3m 48s
    3. Editing the support phone number
      6m 20s
    4. Editing the backpack file name and links
      7m 8s
  8. 38m 45s
    1. Undoing working directory changes
      3m 49s
    2. Unstaging files
      2m 37s
    3. Amending commits
      4m 50s
    4. Retrieving old versions
      4m 7s
    5. Reverting a commit
      3m 12s
    6. Using reset to undo commits
      3m 44s
    7. Demonstrating a soft reset
      4m 8s
    8. Demonstrating a mixed reset
      4m 7s
    9. Demonstrating a hard reset
      5m 8s
    10. Removing untracked files
      3m 3s
  9. 27m 22s
    1. Using .gitignore files
      8m 23s
    2. Understanding what to ignore
      4m 47s
    3. Ignoring files globally
      4m 49s
    4. Ignoring tracked files
      5m 26s
    5. Tracking empty directories
      3m 57s
  10. 26m 51s
    1. Referencing commits
      4m 52s
    2. Exploring tree listings
      3m 46s
    3. Getting more from the commit log
      7m 38s
    4. Viewing commits
      4m 4s
    5. Comparing commits
      6m 31s
  11. 39m 35s
    1. Branching overview
      4m 56s
    2. Viewing and creating branches
      2m 57s
    3. Switching branches
      2m 58s
    4. Creating and switching branches
      4m 53s
    5. Switching branches with uncommitted changes
      3m 26s
    6. Comparing branches
      4m 28s
    7. Renaming branches
      2m 28s
    8. Deleting branches
      4m 18s
    9. Configuring the command prompt to show the branch
      9m 11s
  12. 28m 32s
    1. Merging code
      3m 11s
    2. Using fast-forward merge vs. true merge
      6m 49s
    3. Merging conflicts
      7m 26s
    4. Resolving merge conflicts
      7m 5s
    5. Exploring strategies to reduce merge conflicts
      4m 1s
  13. 14m 34s
    1. Saving changes in the stash
      4m 5s
    2. Viewing stashed changes
      2m 39s
    3. Retrieving stashed changes
      4m 24s
    4. Deleting stashed changes
      3m 26s
  14. 1h 5m
    1. Using local and remote repositories
      6m 38s
    2. Setting up a GitHub account
      5m 39s
    3. Adding a remote repository
      4m 0s
    4. Creating a remote branch
      4m 3s
    5. Cloning a remote repository
      4m 26s
    6. Tracking remote branches
      4m 5s
    7. Pushing changes to a remote repository
      5m 8s
    8. Fetching changes from a remote repository
      5m 47s
    9. Merging in fetched changes
      4m 50s
    10. Checking out remote branches
      3m 22s
    11. Pushing to an updated remote branch
      2m 6s
    12. Deleting a remote branch
      3m 8s
    13. Enabling collaboration
      3m 40s
    14. A collaboration workflow
      8m 43s
  15. 16m 23s
    1. Setting up aliases for common commands
      5m 14s
    2. Using SSH keys for remote login
      2m 56s
    3. Exploring integrated development environments
      1m 4s
    4. Exploring graphical user interfaces
      4m 32s
    5. Understanding Git hosting
      2m 37s
  16. 55s
    1. Goodbye

please wait ...
Watch the Online Video Course Git Essential Training
6h 26m Beginner Aug 24, 2012

Viewers: in countries Watching now:

The course shows how to use Git, the popular open-source version control software, to manage changes to source code and text files. Using a step-by-step approach, author Kevin Skoglund presents the commands that enable efficient code management and reveals the fundamental concepts behind version control systems and the Git architecture. Discover how to track changes to files in a repository, review previous edits, and compare versions of a file; create branches to test new ideas without altering the main project; and merge those changes into the project if they work out. The course begins by demonstrating version control in a single-user, standalone context, before exploring how remote repositories allow users to collaborate on projects effectively.

Topics include:
  • Exploring the history of version control
  • Installing Git on Mac, Windows, and Linux
  • Initializing a repository
  • Writing useful commit messages
  • Understanding the Git three-tree architecture
  • Tracking when files are added, edited, deleted, or moved
  • Viewing change sets and comparing versions
  • Undoing changes and rolling back to previous versions
  • Ignoring changes to select files
  • Creating and working with code branches
  • Merging branches and resolving merge conflicts
  • Stashing changes for later
  • Working with hosted repositories and remote branches
  • Developing an effective collaboration workflow
Git GitHub
Kevin Skoglund

Resolving merge conflicts

In the last movie we learned about merge conflicts, and we actually created one in our Explore California site. That's where we left things off. We left things in the middle of a merge, the merge has not yet been completed, and Git wants us to resolve these conflicts before it will go ahead and complete the merge. What I want us to look at in this movie is how we go about resolving these conflicts. You've three choices as to what to do to resolve these conflicts. First, you can simply abort the merge. You can say oops! That was not what I wanted to do, I was not anticipating all of these problems, get me out of here.

We'll see how to do that. The second is that we can resolve the conflicts manually. Most of the time this is what you're going to do, and I think especially while you're learning how to resolve these conflicts, I think this is the one that you want to do. And then the third one is that you can use a merge tool. There're number of tools out there that will help you to resolve these kinds of conflicts. Now I'm not going to teach you any specific one of those, because there are so many, and my advice would not be go to a Merge tool until you've spent some time resolving them manually. So that you have an idea what the tools are doing for you, and you won't be entirely dependent on them in order to resolve merges.

So let's look at the first one of these, aborting the merge. To abort the merge, while we're in this state, all we have to do is say, git merge --abort. That's it. Now notice I'm no longer in my MERGING state, git status, everything is clean, and if I do git log --oneline on my master branch, you can see that it did not bring anything else. This is the state of things right before the merge. So nothing got merged, I simply aborted it. Now let's do our merge again, git merge text_ edits, once again it did the same thing, created the same conflicts for us.

This time we're going to soldier on, and we're going to resolve the conflicts manually, so the problem was in mission.html. So we can see that again, git status shows us that. What we need to do is we need to resolve the conflicts by hand in mission.html, and then add and commit the result. So that's what we're going to do. Let's open up mission.html. Now we saw before that the markers here, this arrows pointing to the left, going down to the equal sign all way down here to the arrows pointing to the right, is how we know where the conflicts are.

If there had been several of these conflicts it would've marked each one of them. Maybe there's one at the top of the document, one in the middle, one at the bottom, and each one would be a section. So every time there's a problem, you want to just search your document looking to see where the first one of these is. So the best thing to do is here at the top of your document, you do a find and find three of those. So there we go. Now I know I'm right here at the first commit. Now you can go through these line by line and try and sort it all out. You also could do some research here. You can say, all right, let's go back, and let's remind ourselves if we do git log --oneline, let's just do 3 of those.

All right, here's that commit. What was that commit all about? Let's see, git show, let's take a look at that commit. Okay, and you can look through there, and you can see oh, all right, I was doing the curly quotes here, that's really what changed was the curly quotes. So I know that what I need to do is I need to take the version that is in text_edits, this version, there're lot of text_edits in there. So I'm just going to take that and assume that that's the right one, so what I'm going to do is I'm going to go through and make sure that I get all of the curly quotes in there. So let's do--we'll take our single quotes, and let's come down here and look for single quotes that need to be changed, and here's another one, and I am not sure if I've got them all or not, but then I know I need to change this one, this is left double quote, this one is right double quote.

Okay, so that looks pretty good, oh, here's another one, California's people. Okay, so now I have all of the changes in the text_edits version, this is the one I want to keep, so I need to actually remove this from the document. I'm now going to also remove the lines with the equal signs, come down here and remove the ending arrows as well. So now, the document is a regular HTML document, it has all of the changes in there. Let's save it, and let's go ahead and just open up Firefox and then reload the page.

All right, so you'll want to inspect it and make sure that it all looks good, make sure that you're completely happy with the results, that the merge conflict has been resolved to your satisfaction. And once you're completely happy with it and all of the changes have been made, save it and close it. We'll come back over here, and we need to tell it that it needs to add mission, git add mission.html. Now git status, shows that it is ready to be committed, we're ready to do the commit. Now we know how to do a commit, git commit. Normally we'd put a message after it.

You can put a message if you want to provide the commit message, but you don't have to. When you're in the middle of a merge, it has a standard default message that it would use. So just git commit by itself, and it'll use that default message. So git commit, hit Return, it in this case popped up and asked me, I'm going to remove this list of conflicts here because those are gone now, and then I'll just save that, close it, and it says, all right, Merge branch 'text_edits'. Now if we do git status, we don't have anything in there. Let's do git log --oneline. Let's look at just the last 3, or I'll do the last 4.

Now we see we have our merge in there, it has that merge commit, and if we ask it git branch --merged, it does list text_edits as being fully merged into the master branch. So that's it, that's the steps. You open up the files that have a conflict, find the spot where there are problems, manually fix them, do that for all the files that had a conflict. If there were 20 files that had conflicts, you'll do it for all 20 of them. Then add those files to the staging index, and when you're ready git commit will complete the merge and all those merge conflicts will be resolved.

One last thing I want to show you, if you remember I told you that there was this nice future in git log where we could use --graph, git log --graph, and we'll use a couple of other options; --oneline, --all, -decorate, here we are. So if we use all of these together, look what we get. We get a nice showing of the different branches and what happened. Here's the shorten_title branch. You can see where it got folded back in. Here's our merge commit right here that does that. You see, this was a fast-forward one for the seo_title, so it doesn't branch out, it doesn't need this merge commit here. And then we've merged this one back in here, so you can see text_edits is still at this point in time and the HEAD and master have this merge commit in them as well.

So it's nice because it gives you a graphical representation of what you've been doing with all of your branching and merging. Now of course, I mentioned there was a third option which is that you could use a merge tool when you're in that state where you're in between merges, and it hasn't been resolved, you could type git mergetool and then --tool= and then the name of the tool that you want. And the Help will show you all of the different tools that you can use, just typing it by itself will show you all of the different candidates that you could use there. So you could go and look up how these work, see if there's one that you like or feel comfortable with it, and you can also add that to your git config file if you want to always use a certain tool.

Again, I'm not going to show you any specific one of these, I want you to really stick with the basics of resolving them manually first. It's a more advanced thing to start using these merge tools.

Find answers to the most frequently asked questions about Git Essential Training .

Expand all | Collapse all
please wait ...
Q: In the Chapter 10 movie "Configuring the command prompt to show the branch," when I type the function "__git_ps1," I do not get the expected result.
A: The function "__git_ps1" was recently moved to a new file,, as described here:

We will update the video. In the meantime, you may do the same steps you do for .git-completion.bash, but a second time using "" as shown here:
Q: When I use the code the instructor advises in the above video ("git config
--global "Nelda Street"), I still get an "Illegal Instruction"
error. I have OS 10.6.8. Am I doing something wrong?
A: The current installer version of git isn't compatible with older Mac OS versions.
The workaround solutions people offer are:
1. To add "-mmacosx-version-min=10.6" as described here:
2. Or to use the version of git that comes with Xcode, or to use homebrew to install git instead.
Share a link to this course

What are exercise files?

Exercise files are the same files the author uses in the course. Save time by downloading the author's files instead of setting up your own files, and learn by following along with the instructor.

Can I take this course without the exercise files?

Yes! If you decide you would like the exercise files later, you can upgrade to a premium account any time.

Become a member Download sample files See plans and pricing

Please wait... please wait ...
Upgrade to get access to exercise files.

Exercise files video

How to use exercise files.

Learn by watching, listening, and doing, Exercise files are the same files the author uses in the course, so you can download them and follow along Premium memberships include access to all exercise files in the library.

Exercise files

Exercise files video

How to use exercise files.

For additional information on downloading and using exercise files, watch our instructional video or read the instructions in the FAQ .

This course includes free exercise files, so you can practice while you watch the course. To access all the exercise files in our library, become a Premium Member.

Join now Already a member? Log in

* Estimated file size

Are you sure you want to mark all the videos in this course as unwatched?

This will not affect your course history, your reports, or your certificates of completion for this course.

Mark all as unwatched Cancel


You have completed Git Essential Training.

Return to your organization's learning portal to continue training, or close this page.

Become a member to add this course to a playlist

Join today and get unlimited access to the entire library of video courses—and create as many playlists as you like.

Get started

Already a member ?

Exercise files

Learn by watching, listening, and doing! Exercise files are the same files the author uses in the course, so you can download them and follow along. Exercise files are available with all Premium memberships. Learn more

Get started

Already a Premium member?

Exercise files video

How to use exercise files.

Ask a question

Thanks for contacting us.
You’ll hear from our Customer Service team within 24 hours.

Please enter the text shown below:

The classic layout automatically defaults to the latest Flash Player.

To choose a different player, hold the cursor over your name at the top right of any page and choose Site preferences from the dropdown menu.

Continue to classic layout Stay on new layout
Exercise files

Access exercise files from a button right under the course name.

Mark videos as unwatched

Remove icons showing you already watched videos if you want to start over.

Control your viewing experience

Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.

Interactive transcripts

Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.

Learn more, save more. Upgrade today!

Get our Annual Premium Membership at our best savings yet.

Upgrade to our Annual Premium Membership today and get even more value from your subscription:

“In a way, I feel like you are rooting for me. Like you are really invested in my experience, and want me to get as much out of these courses as possible this is the best place to start on your journey to learning new material.”— Nadine H.

Thanks for signing up.

We’ll send you a confirmation email shortly.

Sign up and receive emails about and our online training library:

Here’s our privacy policy with more details about how we handle your information.

Keep up with news, tips, and latest courses with emails from

Sign up and receive emails about and our online training library:

Here’s our privacy policy with more details about how we handle your information.

submit Lightbox submit clicked
Terms and conditions of use

We've updated our terms and conditions (now called terms of service).Go
Review and accept our updated terms of service.