git up: The better git pull
A while ago I stumbled across a nice git extension 'git up'. The README synopsis lays out the motivation:
git pull
has two problems:
- It merges upstream changes by default, when it's really more polite to rebase over them, unless your collaborators enjoy a commit graph that looks like bedhead.
- It only updates the branch you're currently on, which means
git push
will shout at you for being behind on branches you don't particularly care about right now.Solve them once and for all.
As implied above, git-up will update all your branches that are tracking a remote branch. This often comes in handy in fedora git repos:
[crobinso@colepc openbios (master)]$ fedpkg pull
Already up-to-date.
[crobinso@colepc openbios (master)]$ git up
Fetching origin
f20 fast-forwarding...
master up to date
returning to master
Another useful bit is that it will stash and unstash uncommitted changes. Often times I find myself doing this:
[crobinso@colepc ~]$ cd src/virt-manager/
# Hack some minor bug fix
[crobinso@colepc virt-manager (master *)]$
# Oops, I should pull first, maybe the issue is fixed
[crobinso@colepc virt-manager (master *)]$ git pull
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.
[crobinso@colepc virt-manager (master *)]$ git up
Fetching origin
stashing 1 changes
master up to date
unstashing
[crobinso@colepc virt-manager (master *)]$
Nowadays I don't even attempt the pull, git up
is my reflex. (And yes I should just make it a reflex that I switch to a branch before doing any hacking...)
Nice to see that nowadays git-up is packaged in fedora, so grab it with sudo yum install rubygem-git-up
(Edit 2019: The ruby version has been abandoned, but there's an equivalent available via python equivalent I'm using now: https://pypi.org/project/git-up/)