GIT 1.1.6
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index d20b475..b1bc827 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -7,7 +7,7 @@
 
 SYNOPSIS
 --------
-'git-branch' [-d | -D] [<branchname> [start-point]]
+'git-branch' [(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]]
 
 DESCRIPTION
 -----------
@@ -25,10 +25,13 @@
 -D::
 	Delete a branch irrespective of its index status.
 
+-f::
+	Force a reset of <branchname> to <start-point> (or current head).
+
 <branchname>::
 	The name of the branch to create or delete.
 
-start-point::
+<start-point>::
 	Where to create the branch; defaults to HEAD. This
 	option has no meaning with -d and -D.
 
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 2254bac..29fa307 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -30,10 +30,10 @@
 	to be pushed.
 
 -f, \--force::
-	Usually, the command refuses to update a local ref that is
-	not an ancestor of the remote ref used to overwrite it.
-	This flag disables the check.  What this means is that the
-	local repository can lose commits; use it with care.
+	Usually, the command refuses to update a remote ref that is
+	not a descendent of the local ref used to overwrite it.
+	This flag disables the check.  This can cause the
+	remote repository to lose commits; use it with care.
 
 
 Author
diff --git a/git-branch.sh b/git-branch.sh
index b0e54ed..6ac961e 100755
--- a/git-branch.sh
+++ b/git-branch.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-USAGE='[-d <branch>] | [[-f] <branch> [start-point]]'
+USAGE='[(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]]'
 LONG_USAGE='If no arguments, show available branches and mark current branch with a star.
 If one argument, create a new branch <branchname> based off of current HEAD.
 If two arguments, create a new branch <branchname> based off of <start-point>.'
diff --git a/git-merge-recursive.py b/git-merge-recursive.py
index 56c3641..b17c8e5 100755
--- a/git-merge-recursive.py
+++ b/git-merge-recursive.py
@@ -205,11 +205,16 @@
             orig = runProgram(['git-unpack-file', oSha]).rstrip()
             src1 = runProgram(['git-unpack-file', aSha]).rstrip()
             src2 = runProgram(['git-unpack-file', bSha]).rstrip()
-            [out, code] = runProgram(['merge',
-                                      '-L', branch1Name + '/' + aPath,
-                                      '-L', 'orig/' + oPath,
-                                      '-L', branch2Name + '/' + bPath,
-                                      src1, orig, src2], returnCode=True)
+            try:
+                [out, code] = runProgram(['merge',
+                                          '-L', branch1Name + '/' + aPath,
+                                          '-L', 'orig/' + oPath,
+                                          '-L', branch2Name + '/' + bPath,
+                                          src1, orig, src2], returnCode=True)
+            except ProgramError, e:
+                print >>sys.stderr, e
+                die("Failed to execute 'merge'. merge(1) is used as the "
+                    "file-level merge tool. Is 'merge' in your path?")
 
             sha = runProgram(['git-hash-object', '-t', 'blob', '-w',
                               src1]).rstrip()
diff --git a/templates/hooks--pre-commit b/templates/hooks--pre-commit
index 4bb6803..43d3b6e 100644
--- a/templates/hooks--pre-commit
+++ b/templates/hooks--pre-commit
@@ -10,8 +10,16 @@
 # This is slightly modified from Andrew Morton's Perfect Patch.
 # Lines you introduce should not have trailing whitespace.
 # Also check for an indentation that has SP before a TAB.
+
+if git-rev-parse --verify HEAD 2>/dev/null
+then
+	git-diff-index -p -M --cached HEAD
+else
+	# NEEDSWORK: we should produce a diff with an empty tree here
+	# if we want to do the same verification for the initial import.
+	:
+fi |
 perl -e '
-    my $fh;
     my $found_bad = 0;
     my $filename;
     my $reported_filename = "";
@@ -31,8 +39,7 @@
 	print STDERR "* $why (line $lineno)\n";
 	print STDERR "$filename:$lineno:$line\n";
     }
-    open $fh, "-|", qw(git-diff-index -p -M --cached HEAD);
-    while (<$fh>) {
+    while (<>) {
 	if (m|^diff --git a/(.*) b/\1$|) {
 	    $filename = $1;
 	    next;