GIT v1.5.4.5 Release Notes
==========================

Fixes since v1.5.4.4
--------------------

 * "git fetch there" when the URL information came from the Cogito style
   branches/there file did not update refs/heads/there (regression in
   1.5.4).

 * Bogus refspec configuration such as "remote.there.fetch = =" were not
   detected as errors (regressionin 1.5.4).

 * You couldn't specify a custom editor whose path contains a whitespace
   via GIT_EDITOR (and core.editor).

 * The subdirectory filter to "git filter-branch" mishandled a history
   where the subdirectory becomes empty and then later becomes non-empty.

 * "git shortlog" gave an empty line if the original commit message was
   malformed (e.g. a botched import from foreign SCM).  Now it finds the
   first non-empty line and uses it for better information.

 * When the user fails to give a revision parameter to "git svn", an error
   from the Perl interpreter was issued because the script lacked proper
   error checking.

 * After "git rebase" stopped due to conflicts, if the user played with
   "git reset" and friends, "git rebase --abort" failed to go back to the
   correct commit.

 * Additional work trees prepared with git-new-workdir (in contrib/) did
   not share git-svn metadata directory .git/svn with the original.

 * "git-merge-recursive" did not mark addition of the same path with
   different filemodes correctly as a conflict.

 * "gitweb" gave malformed URL when pathinfo stype paths are in use.

 * "-n" stands for "--no-tags" again for "git fetch".

 * "git format-patch" did not detect the need to add 8-bit MIME header
   when the user used format.header configuration.

 * "rev~" revision specifier used to mean "rev", which was inconsistent
   with how "rev^" worked.  Now "rev~" is the same as "rev~1" (hence it
   also is the same as "rev^1"), and "rev~0" is the same as "rev^0"
   (i.e. it has to be a commit).

 * "git quiltimport" did not grok empty lines, lines in "file -pNNN"
   format to specify the prefix levels and lines with trailing comments.

 * "git rebase -m" triggered pre-commit verification, which made
   "rebase --continue" impossible.

As usual, it also comes with many documentation fixes and clarifications.
