$GIT_DIR to work in a subdirectory of a working tree that is
not located at "$GIT_DIR/..".
+ - Giving "--file=<file>" option to "git config" is the same as
+ running the command with GIT_CONFIG=<file> environment.
+
- "git log" learned a new option "--follow", to follow
renaming history of a single file.
- "git-cvsserver" learned new options (--base-path, --export-all,
--strict-paths) inspired by git-daemon.
+ - "git daemon --base-path-relaxed" can help migrating a repository URL
+ that did not use to use --base-path to use --base-path.
+
- "git-commit" can use "-t templatefile" option and commit.template
configuration variable to prime the commit message given to you in the
editor.
of the format ('tgz', 'tbz2' or 'zip'). Please update the
your configuration file accordingly.
+ - "git diff" (but not the plumbing level "git diff-tree") now
+ recursively descends into trees by default.
+
- The editor to use with many interactive commands can be
overridden with GIT_EDITOR environment variable, or if it
does not exist, with core.editor configuration variable. As
- The diffstat given after a merge (or a pull) honors the
color.diff configuration.
+ - "git commit --amend" is now compatible with various message source
+ options such as -m/-C/-c/-F.
+
- "git-apply --whitespace=strip" removes blank lines added at
the end of the file.
--
exec >/var/tmp/1
-O=v1.5.3-rc3
+O=v1.5.3-rc3-119-g50cff52
echo O=`git describe refs/heads/master`
git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
<ol>\r
<li>\r
<p>\r
-delete remote-tracking branches "todo", "html", "man"\r
+Delete remote-tracking branches "todo", "html", "man"\r
</p>\r
</li>\r
<li>\r
<p>\r
-delete "test" branch even if the "master" branch does not have all\r
+Delete "test" branch even if the "master" branch does not have all\r
commits from test branch.\r
</p>\r
</li>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 19-Jul-2007 02:09:32 UTC\r
+Last updated 02-Aug-2007 07:23:08 UTC\r
</div>\r
</div>\r
</body>\r
$ git branch -D test <2>
------------
+
-<1> delete remote-tracking branches "todo", "html", "man"
-<2> delete "test" branch even if the "master" branch does not have all
+<1> Delete remote-tracking branches "todo", "html", "man"
+<2> Delete "test" branch even if the "master" branch does not have all
commits from test branch.
<ol>\r
<li>\r
<p>\r
-changes in the working tree not yet staged for the next commit.\r
+Changes in the working tree not yet staged for the next commit.\r
</p>\r
</li>\r
<li>\r
<p>\r
-changes between the index and your last commit; what you\r
+Changes between the index and your last commit; what you\r
would be committing if you run "git commit" without "-a" option.\r
</p>\r
</li>\r
<li>\r
<p>\r
-changes in the working tree since your last commit; what you\r
+Changes in the working tree since your last commit; what you\r
would be committing if you run "git commit -a"\r
</p>\r
</li>\r
<ol>\r
<li>\r
<p>\r
-instead of using the tip of the current branch, compare with the\r
+Instead of using the tip of the current branch, compare with the\r
tip of "test" branch.\r
</p>\r
</li>\r
<li>\r
<p>\r
-instead of comparing with the tip of "test" branch, compare with\r
+Instead of comparing with the tip of "test" branch, compare with\r
the tip of the current branch, but limit the comparison to the\r
file "test".\r
</p>\r
</li>\r
<li>\r
<p>\r
-compare the version before the last commit and the last commit.\r
+Compare the version before the last commit and the last commit.\r
</p>\r
</li>\r
</ol>\r
<ol>\r
<li>\r
<p>\r
-show only modification, rename and copy, but not addition\r
+Show only modification, rename and copy, but not addition\r
nor deletion.\r
</p>\r
</li>\r
<li>\r
<p>\r
-show only names and the nature of change, but not actual\r
+Show only names and the nature of change, but not actual\r
diff output.\r
</p>\r
</li>\r
<li>\r
<p>\r
-limit diff output to named subtrees.\r
+Limit diff output to named subtrees.\r
</p>\r
</li>\r
</ol>\r
<ol>\r
<li>\r
<p>\r
-spend extra cycles to find renames, copies and complete\r
+Spend extra cycles to find renames, copies and complete\r
rewrites (very expensive).\r
</p>\r
</li>\r
<li>\r
<p>\r
-output diff in reverse.\r
+Output diff in reverse.\r
</p>\r
</li>\r
</ol>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 30-Jul-2007 09:06:57 UTC\r
+Last updated 02-Aug-2007 07:23:08 UTC\r
</div>\r
</div>\r
</body>\r
$ git diff HEAD <3>
------------
+
-<1> changes in the working tree not yet staged for the next commit.
-<2> changes between the index and your last commit; what you
+<1> Changes in the working tree not yet staged for the next commit.
+<2> Changes between the index and your last commit; what you
would be committing if you run "git commit" without "-a" option.
-<3> changes in the working tree since your last commit; what you
+<3> Changes in the working tree since your last commit; what you
would be committing if you run "git commit -a"
Comparing with arbitrary commits::
$ git diff HEAD^ HEAD <3>
------------
+
-<1> instead of using the tip of the current branch, compare with the
+<1> Instead of using the tip of the current branch, compare with the
tip of "test" branch.
-<2> instead of comparing with the tip of "test" branch, compare with
+<2> Instead of comparing with the tip of "test" branch, compare with
the tip of the current branch, but limit the comparison to the
file "test".
-<3> compare the version before the last commit and the last commit.
+<3> Compare the version before the last commit and the last commit.
Limiting the diff output::
$ git diff arch/i386 include/asm-i386 <3>
------------
+
-<1> show only modification, rename and copy, but not addition
+<1> Show only modification, rename and copy, but not addition
nor deletion.
-<2> show only names and the nature of change, but not actual
+<2> Show only names and the nature of change, but not actual
diff output.
-<3> limit diff output to named subtrees.
+<3> Limit diff output to named subtrees.
Munging the diff output::
+
$ git diff -R <2>
------------
+
-<1> spend extra cycles to find renames, copies and complete
+<1> Spend extra cycles to find renames, copies and complete
rewrites (very expensive).
-<2> output diff in reverse.
+<2> Output diff in reverse.
Author
<ol>\r
<li>\r
<p>\r
-the results are updated both in the index file and in your\r
- working tree,\r
+The results are updated both in the index file and in your\r
+ working tree;\r
</p>\r
</li>\r
<li>\r
<p>\r
-index file is written out as a tree,\r
+Index file is written out as a tree;\r
</p>\r
</li>\r
<li>\r
<p>\r
-the tree gets committed, and\r
+The tree gets committed; and\r
</p>\r
</li>\r
<li>\r
<p>\r
-the <tt>HEAD</tt> pointer gets advanced.\r
+The <tt>HEAD</tt> pointer gets advanced.\r
</p>\r
</li>\r
</ol>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 19-Jul-2007 02:09:46 UTC\r
+Last updated 02-Aug-2007 07:23:09 UTC\r
</div>\r
</div>\r
</body>\r
When things cleanly merge, these things happen:
-1. the results are updated both in the index file and in your
- working tree,
-2. index file is written out as a tree,
-3. the tree gets committed, and
-4. the `HEAD` pointer gets advanced.
+1. The results are updated both in the index file and in your
+ working tree;
+2. Index file is written out as a tree;
+3. The tree gets committed; and
+4. The `HEAD` pointer gets advanced.
Because of 2., we require that the original state of the index
file to match exactly the current `HEAD` commit; otherwise we
</li>\r
<li>\r
<p>\r
-make corrections to working tree files.\r
+Make corrections to working tree files.\r
</p>\r
</li>\r
<li>\r
<ol>\r
<li>\r
<p>\r
-you are happily working on something, and find the changes\r
+You are happily working on something, and find the changes\r
in these files are in good order. You do not want to see them\r
when you run "git diff", because you plan to work on other files\r
and changes with these files are distracting.\r
</li>\r
<li>\r
<p>\r
-somebody asks you to pull, and the changes sounds worthy of merging.\r
+Somebody asks you to pull, and the changes sounds worthy of merging.\r
</p>\r
</li>\r
<li>\r
<p>\r
-however, you already dirtied the index (i.e. your index does\r
+However, you already dirtied the index (i.e. your index does\r
not match the HEAD commit). But you know the pull you are going\r
to make does not affect frotz.c nor filfre.c, so you revert the\r
index changes for these two files. Your changes in working tree\r
</li>\r
<li>\r
<p>\r
-then you can pull and merge, leaving frotz.c and filfre.c\r
+Then you can pull and merge, leaving frotz.c and filfre.c\r
changes still in the working tree.\r
</p>\r
</li>\r
<ol>\r
<li>\r
<p>\r
-try to update from the upstream resulted in a lot of\r
+Try to update from the upstream resulted in a lot of\r
conflicts; you were not ready to spend a lot of time merging\r
right now, so you decide to do that later.\r
</p>\r
</li>\r
<li>\r
<p>\r
-merge a topic branch into the current branch, which resulted\r
+Merge a topic branch into the current branch, which resulted\r
in a fast forward.\r
</p>\r
</li>\r
<li>\r
<p>\r
-but you decided that the topic branch is not ready for public\r
+But you decided that the topic branch is not ready for public\r
consumption yet. "pull" or "merge" always leaves the original\r
tip of the current branch in ORIG_HEAD, so resetting hard to it\r
brings your index file and the working tree back to that state,\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 19-Jul-2007 02:09:52 UTC\r
+Last updated 02-Aug-2007 07:23:09 UTC\r
</div>\r
</div>\r
</body>\r
<1> This is most often done when you remembered what you
just committed is incomplete, or you misspelled your commit
message, or both. Leaves working tree as it was before "reset".
-<2> make corrections to working tree files.
+<2> Make corrections to working tree files.
<3> "reset" copies the old head to .git/ORIG_HEAD; redo the
commit by starting with its log message. If you do not need to
edit the message further, you can give -C option instead.
$ git pull git://info.example.com/ nitfol <4>
------------
+
-<1> you are happily working on something, and find the changes
+<1> You are happily working on something, and find the changes
in these files are in good order. You do not want to see them
when you run "git diff", because you plan to work on other files
and changes with these files are distracting.
-<2> somebody asks you to pull, and the changes sounds worthy of merging.
-<3> however, you already dirtied the index (i.e. your index does
+<2> Somebody asks you to pull, and the changes sounds worthy of merging.
+<3> However, you already dirtied the index (i.e. your index does
not match the HEAD commit). But you know the pull you are going
to make does not affect frotz.c nor filfre.c, so you revert the
index changes for these two files. Your changes in working tree
remain there.
-<4> then you can pull and merge, leaving frotz.c and filfre.c
+<4> Then you can pull and merge, leaving frotz.c and filfre.c
changes still in the working tree.
Undo a merge or pull::
$ git reset --hard ORIG_HEAD <4>
------------
+
-<1> try to update from the upstream resulted in a lot of
+<1> Try to update from the upstream resulted in a lot of
conflicts; you were not ready to spend a lot of time merging
right now, so you decide to do that later.
<2> "pull" has not made merge commit, so "git reset --hard"
which is a synonym for "git reset --hard HEAD" clears the mess
from the index file and the working tree.
-<3> merge a topic branch into the current branch, which resulted
+<3> Merge a topic branch into the current branch, which resulted
in a fast forward.
-<4> but you decided that the topic branch is not ready for public
+<4> But you decided that the topic branch is not ready for public
consumption yet. "pull" or "merge" always leaves the original
tip of the current branch in ORIG_HEAD, so resetting hard to it
brings your index file and the working tree back to that state,