Git Essential Training
Illustration by John Hersey

A collaboration workflow


Git Essential Training

with Kevin Skoglund

Video: A collaboration workflow

In this movie, we will look at an example workflow showing how to use Git to collaborate with another user. My hope is that this kind of real-world example will help to give you a big picture and will pull together all the different pieces that we have learned. But we are not going to actually make the changes, that would take more time and would also keep you from seeing the workflows clearly. For this example, I am going to collaborate with my coworker Lynda on adding a new feature to the Explore California web site and our new feature will be a feedback form, so the customers of Explore California can share their comments and feedback.
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

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

A collaboration workflow

In this movie, we will look at an example workflow showing how to use Git to collaborate with another user. My hope is that this kind of real-world example will help to give you a big picture and will pull together all the different pieces that we have learned. But we are not going to actually make the changes, that would take more time and would also keep you from seeing the workflows clearly. For this example, I am going to collaborate with my coworker Lynda on adding a new feature to the Explore California web site and our new feature will be a feedback form, so the customers of Explore California can share their comments and feedback.

Let's start by looking at what my work would look like. Now this is an ongoing project. I've already got my repositories set up, and I have already pushed at least the master branch up to the remote repositories. So let's assume that we have already done that ahead of time, I am just logging in today to create this new feature. I am already on my master branch, if I'm not, then I will check out the master branch that I start there at master. And then the very first thing that we want to do every day, every time we start work, every time we have been away from the computer for a few hours, we want to do a git fetch.

We want to find out what new commits have been made and pushed to the repository since the last time we checked in. So I do my git fetch, and it turns out that there was work done overnight by some of my coworkers. Their commits are unrelated to the feature that I'm about to add, but I still want to make sure that I have to master. So the next thing I want to do is I want to merge those changes which are in origin/master into my master branch. Now at this point, my branch of master is totally in sync with what's on the remote repository, and I am ready to start my work.

I am going to do the work on my new feature in the separate branch, and that way it won't interfere with anything that's going on with master. And if in the end we decide not to do the feature for some reason, it's easy to just throw it away. So the next thing I want to do is create that branch, and I will do that using checkout -b that will check it out as a new branch, or create the branch and switch to it. So now even though the contents of my working directory are the same as master, I've switched to my new feedback form branch.

So I open up my working directory, I make the changes that I want there, in this case I am going to be adding a page called feedback.html, and I go in, and I edit the form and get it all look exactly like I want. When I am done, then I am ready to make my commit. So I add it to the staging area, and then I commit it. At this point, my changes are now on my local repository inside my feedback form branch. I am not ready to merge them into master just yet, I want my coworker Lynda to have a look at them as well. So I need to put them on the remote repository for her to see them.

Before I push them up there though, I want to do a git fetch again and find out if there been any more commits that have come in that I need to take into consideration. If there have been, then I want to take a look at those and see whether I need to bring them into my feedback branch or not. In this example there were no other commits on master. I can go ahead, and I can push my branch up to origin, and I am pushing the whole branch, not just to commit. The branch doesn't exist up on the remote server until I push it. So I use git push, origin feedback_form, and then I also use that -u option.

You will remember that makes it a tracking branch, so now in the future, I will continue to track changes from feedback_form, and it will save me some typing, because git will know where I want to push to without having to tell at each time. So when that's done, my work is now on the remote repository, now my coworkers can all see it. So I send an email to Lynda saying hey Lynda, remember that discussion we had last night about adding the feedback form? Well I did a draft of it, and I put it up on the remote. Can you take a look and let me know what you think? So now let's switch over, and let's look at things from Lynda's point of view.

So Lynda also already has the repository, she has been working on it for couple of weeks. If she hadn't been, we know that she would do a git clone, in order to get the repository, and she is also going to be on the master branch, if not we will go ahead and just switch to make sure that she is there. The very first thing that Lynda is going to do, she needs to do a git fetch. Always the first thing. Until she does that fetch, she can't even see the branch that I pushed up there. Her computer hasn't sunk up so it doesn't have that information about all of the other branches that might be available.

After the git fetch though, now git branch -r will show her that new branch, and she can see it. There were changes that came in over night from other coworkers, so she will probably want to incorporate those into her master branch to just to make sure that master is always brought up to date. It's not strictly necessary, but it's a good practice. After she has done that, she will be ready to take a look at my work. So she will want to check out the branch that I pushed up there. Again she will use check out with the -b option. This time she won't just say feedback form which would take it from the branch that she's currently on, her version of master, instead she will say feedback form and the source from that is going to be origin feedback form, the one that I put up there.

It will also make it a tracking branch at the same time, so she wants to see what I did, she is going to use git log and she can find the commit that I made or added feedback.form.html. She can also take a look at the actual commit itself, she will use the SHA probably. She could also use HEAD if that was still the last commit and see what that said. She could also use the branch name, git show feedback_form, and as long as it's the last commit that's the one she would see. After looking at my commit and bringing it up in the browser to take a look there, Lynda decides that we should add a select option to the form so that customers can pick which tour they took and include that with the feedback, and that way we will know which tour they are referencing when they talk about the tour that they took.

So she makes that change and then she commits it and she does that using the -a option so that it both adds it to staging and commits it all at the same time. Now she has got that change on her local machine, she needs to put it on the remote where I can see it. So she does a git fetch to make sure no new changes have come in, they haven't so she does a git push. At this point Lynda is done. So she sends me back an email saying, it looks great I just made one quick change. On my side again, I want to see what change she has got, so the very first thing I do is fetch, so I can see the change.

Before I merge it in though, I want to take a look at it, so I am going to using git log. I am going to use the -p option which is for patch, and it will show each of the log entries with a diff of all the changes that were made in that log entry. And I am going to ask it to show me everything from feedback form, my copy, up to where origin feedback form is. That's the difference between the state of mine and the state of what Lynda pushed up to the repository. So I can look at those, and I can take a look at all the changes that she made, those changes look fine, I like them.

So I am going to now go ahead and merge them into my feedback branch. So at this point now, the feedback_form branch is in sync between me, the remote repository and Lynda. We all have the same things. In this case the merge was a fast-forward merge, so there is really nothing to commit, but if I had made other changes in the mean time that I needed to merge in, well then I would merge those together, and we will push the result back up to the remote. But since I didn't, since it was a simple fast-forward merge, I am ready to now call this feature finished and to fold it back into the master branch.

So I am going to switch back to the master branch, after I switch branches, I want to do a git fetch and find out if there were any changes that came in, while I was looking at Lynda's changes. If there were new changes that came in, I am going to merge those back into origin/master. At this point now, master is completely up to date. I definitely want to make sure I have got master as up to date is possible before I do this next step. Then next step is that I am going to merge in the changes from feedback form. I am going to take the new work and merge it into the most recent possible state of master.

I did a merge from feedback_form but I could have just as easily done a merge from origin feedback_form. They both point to the exact same commit and then after I have made that merge, and I've resolved any kind of merge conflicts that might have come up, then I do git push, and now my work is on the remote in the master branch where all of my coworkers can see it, where it can eventually be deployed on the Explore California web site. That gives an idea of the process which you go through when you're collaborating with the coworkers.

It may change because you may be collaborating with three or four different people, you may all be checking in and out things, but it's the same basic kind of process over and over again. It may seem like a lot to remember when you're a beginner, but it becomes second nature very quickly.

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.