Skip to content

Instantly share code, notes, and snippets.

@trey
Created May 18, 2012 03:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save trey/2722930 to your computer and use it in GitHub Desktop.
Save trey/2722930 to your computer and use it in GitHub Desktop.
My Git Workflow

My (somewhat outdated) Git Workflow

Local Branches

There are some common hickups I see in the day-to-day use of Git that can be fairly easily remedied by the liberal use of local branches.

When I start any new work (or at the very least before I commit my work), I create a new local branch named for the feature on which I'm working.

$ git co -b robotic-turtles

I might work on that feature for a few minutes, or it could take several days. In the meantime, I can keep up with what my coworkers are doing with the same repository without it ever conflicting with what I'm doing.

When I want to pull in other people's changes, I simply go to my local tracking branch and pull in the changes.

$ git co master
$ git pull

In order to keep my new feature branch up-to-date with the rest of the repository, I simply rebase against it periodically.

$ git co robotic-turtles
$ git rebase master

This is a potentially dangerous way of "merging" in changes, but as long as you never push your feature branch anywhere (until you do merge it into the tracking branch), it's perfectly safe. The reason it can be dangerous is that it does a bit of history re-writing. A rebase takes all your feature branch changes and rewrites them as if they took place after all the changes from everyone else. I think this is good for a couple of reasons:

  1. Your commits for your feature branch will show up at the top of git log. As soon as you push your changes to the shared branch, you'll see all your stuff first (as opposed to interspersed throughout the log depending on the time you made the commits).
  2. You will stop creating commit messages that are automatically generated "Merge branch 'whatever' into 'whatever-else'," since you rebased instead of merged.

When I've finished working on the feature branch and rebased in everyone else's changes a last time, I'll merge it into the tracking branch.

$ git co master
$ git merge robotic-turtles

Since the feature branch has everything in that's in the tracking branch, it doesn't create a new merge commit. Everything's just happy. Push your changes and get rolling on the next feature.

Amend

In order to really keep my commits clean, I try to limit myself to a single commit for a feature (or ticket). I continue to commit obsessively (as is my nature), but all that ever shows up in the public repository is a single commit. That's because I use:

$ git commit --amend

As with rebasing, you should only ever do this on commits that haven't been pushed anywhere. As long as you're doing this on your feature branch, you'll be safe.

By using amend, you can keep adding changes to the same commit, and revise the commit message as you do more and more things.

@trey
Copy link
Author

trey commented May 18, 2012

former location

This is a Solutions Log post.

@jamiew
Copy link

jamiew commented Dec 3, 2012

Instead of amending, you could also squash commits on merge: git merge --squash robotic-turtles

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment