diff --git a/app/Git/Fmt/Options.hs b/app/Git/Fmt/Options.hs
--- a/app/Git/Fmt/Options.hs
+++ b/app/Git/Fmt/Options.hs
@@ -12,7 +12,7 @@
 
 module Git.Fmt.Options (
     -- * Options
-    Options(..), Chatty(..), Mode(..), Reference,
+    Options(..), Chatty(..), Mode(..), Files(..),
 
     -- * Optparse
     gitFmtPrefs, gitFmtInfo, gitFmt,
@@ -28,13 +28,12 @@
 
 -- | Options.
 data Options = Options {
-        optChatty           :: Chatty,
-        optNull             :: Bool,
-        optMode             :: Mode,
-        optOperateOnTracked :: Bool,
-        optOperateOn        :: Reference,
-        optThreads          :: Maybe Int,
-        argPaths            :: [FilePath]
+        optChatty    :: Chatty,
+        optNull      :: Bool,
+        optMode      :: Mode,
+        optOperateOn :: Files,
+        optThreads   :: Maybe Int,
+        argPaths     :: [FilePath]
     }
     deriving (Eq, Show)
 
@@ -46,8 +45,9 @@
 data Mode = Normal | DryRun
     deriving (Eq, Show)
 
--- | Git reference.
-type Reference = String
+-- | Operation files.
+data Files = Tracked | Reference String
+    deriving (Eq, Show)
 
 -- | The default preferences.
 --   Limits the help output to 100 columns.
@@ -59,6 +59,10 @@
 gitFmtInfo = info (infoOptions <*> gitFmt) fullDesc
     where
         infoOptions = helper <*> version <*> numericVersion
+        helper = abortOption ShowHelpText $ mconcat [
+            short 'h', hidden,
+            help "Show this help text"
+            ]
         version = infoOption ("Version " ++ showVersion This.version) $ mconcat [
             long "version", short 'V', hidden,
             help "Show this binary's version"
@@ -72,7 +76,7 @@
 gitFmt :: Parser Options
 gitFmt = Options
     <$> (
-        flag' Quiet (mconcat [
+            flag' Quiet (mconcat [
             long "quiet", short 'q', hidden,
             help "Be quiet"
             ])
@@ -90,15 +94,17 @@
         value Normal, showDefaultWith $ const "normal",
         help "Specify the mode as either `normal' or `dry-run'"
         ])
-    <*> switch (mconcat [
-        long "operate-on-tracked",
-        help "Operate on all tracked files (i.e., `git ls-files')"
-        ])
-    <*> strOption (mconcat [
-        long "operate-on", metavar "REF",
-        value "head", showDefault,
-        help "Operate on all files in the reference (i.e., `git diff REF --name-only')"
-        ])
+    <*> (
+            flag' Tracked (mconcat [
+            long "operate-on-tracked",
+            help "Operate on all tracked files (i.e., `git ls-files')"
+            ])
+        <|> Reference <$> strOption (mconcat [
+            long "operate-on", metavar "REF",
+            value "head", showDefault,
+            help "Operate on all files in the reference (i.e., `git diff REF --name-only')"
+            ])
+        )
     <*> natOption (mconcat [
         long "threads", metavar "INT",
         value Nothing, showDefaultWith $ const "number of processors",
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -109,15 +109,9 @@
         expandDirectory path = ifM (liftIO $ doesDirectoryExist path) (liftIO $ listFilesRecursive path) (return [path])
 
 initialFilePaths :: (MonadError ExitCode m, MonadIO m, MonadLogger m) => Options -> m [FilePath]
-initialFilePaths options
-    | optOperateOnTracked options   = trackedFilePaths
-    | otherwise                     = refFilePaths $ optOperateOn options
-
-trackedFilePaths :: (MonadError ExitCode m, MonadIO m, MonadLogger m) => m [FilePath]
-trackedFilePaths = linesBy (== '\0') <$> runProcess_ "git" ["ls-files", "-z"]
-
-refFilePaths :: (MonadError ExitCode m, MonadIO m, MonadLogger m) => String -> m [FilePath]
-refFilePaths ref = linesBy (== '\0') <$> runProcess_ "git" ["diff", ref, "--name-only", "-z"]
+initialFilePaths options = linesBy (== '\0') <$> case optOperateOn options of
+    Tracked         -> runProcess_ "git" ["ls-files", "-z"]
+    Reference ref   -> runProcess_ "git" ["diff", ref, "--name-only", "-z"]
 
 pipeline :: (MonadIO m, MonadLogger m, MonadReader Config m) => Pipe (Status, FilePath, FilePath) (Status, FilePath, FilePath) m ()
 pipeline = checkFileSupported >-> checkFileExists >-> createPrettyFile >-> runProgram >-> checkFilePretty
diff --git a/git-fmt.cabal b/git-fmt.cabal
--- a/git-fmt.cabal
+++ b/git-fmt.cabal
@@ -1,5 +1,5 @@
 name:           git-fmt
-version:        0.3.0.2
+version:        0.3.0.3
 
 author:         Henry J. Wylde
 maintainer:     public@hjwylde.com
diff --git a/src/Omnifmt/Exit.hs b/src/Omnifmt/Exit.hs
--- a/src/Omnifmt/Exit.hs
+++ b/src/Omnifmt/Exit.hs
@@ -10,8 +10,6 @@
 Extra exit utilities.
 -}
 
-{-# OPTIONS_HADDOCK hide #-}
-
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 
diff --git a/src/Omnifmt/Process.hs b/src/Omnifmt/Process.hs
--- a/src/Omnifmt/Process.hs
+++ b/src/Omnifmt/Process.hs
@@ -10,8 +10,6 @@
 System process utilities.
 -}
 
-{-# OPTIONS_HADDOCK hide #-}
-
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 
