Items outstanding:

 * Checkout $PARENT version to working directory, overwriting current
   version.  ($PARENT is HEAD, except when amending).

 * Update index with $PARENT version but leave working directory
   alone.

 * Add all new files in one shot (e.g. "git add .").

 * Add file to .gitignore or info/excludes.

 * Make initial commits work (currently it crashes the UI).

 * Populate the pull menu with local branches.

 * Make use of the new default merge data stored in repo-config.

 * Indicate what the current branch is.

 * Checkout or create a different local branch.

 * Delete a local branch.

 * Store user preferences (like font, window layout) in global
   repo-config.

 * Allow user to define keyboard shortcuts for frequently used fetch
   or merge operations.  Or maybe just define a keyboard shortcut
   for default fetch/default merge of current branch is enough;
   but I do know a few users who merge a couple of common branches
   also into the same branch so one default isn't quite enough.

 * Better organize fetch/push/pull console windows.

 * Clone UI (to download a new repository).

 * Remotes editor (for .git/config format only).

 * Show a shortlog of the last couple of commits in the main window,
   to give the user warm fuzzy feelings that we have their data
   saved.
