On Sat, Oct 30, 2010 at 08:12:27PM -0700, Junio C Hamano wrote:
Nguyễn Thái Ngọc Duy [off-list ref] writes:
quoted
"git diff --cached" (without revision) used to mean "git diff --cached
HEAD" (i.e. the user was too lazy to type HEAD). This "correctly"
failed when there was no commit yet. But was that correctness useful?
This patch changes the definition of what particular command means.
It is a request to show what _would_ be committed without further "git
add". The internal implementation is still the same "git diff
--cached HEAD" when HEAD exists, but when there is no commit yet, it
compares the index with an empty tree object to achieve the desired
result.
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
Will take a look at it, and queue. Thanks.
quoted
"git diff --cached HEAD" does fail, but I don't really care.
I _do_ care, and so should you. And I think it _should_ fail, if the user
explicitly asked to compare the index with HEAD that does not exist yet.
As we are updating the semantics of a Porcelain command, there should be
an update that explains the new usage in the documentation, no?
Yes.
--8<--
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt
index dd1fb32..518e46b 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.txt
@@ -32,7 +32,9 @@ directories. This behavior can be forced by --no-index.
This form is to view the changes you staged for the next
commit relative to the named <commit>. Typically you
would want comparison with the latest commit, so if you
- do not give <commit>, it defaults to HEAD.
+ do not give <commit>, it defaults to HEAD. If HEAD does
+ not exist (e.g. unborn branches) and <commit> is not
+ given, it shows all staged changes.
--staged is a synonym of --cached.
'git diff' [--options] <commit> [--] [<path>...]::
--8<--
--
Duy