* Commit-ish shortcut for immediate parent range
@ 2006-10-22 14:48 Andy Parkins
2006-10-22 15:11 ` Jakub Narebski
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Andy Parkins @ 2006-10-22 14:48 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 351 bytes --]
Hello,
Git's commit-ish is very powerful. I was wondering however, if there was a
shortcut for (for example)?
git-diff 3435fdb4c^..3435fdb4c
That is - the short range of a particular commit's parent to that commit; like
git-diff 3435fdb4c!
Or similar.
Andy
--
Dr Andrew Parkins, M Eng (Hons), AMIEE
andyparkins@gmail.com
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 14:48 Commit-ish shortcut for immediate parent range Andy Parkins
@ 2006-10-22 15:11 ` Jakub Narebski
2006-10-22 17:25 ` Linus Torvalds
2006-10-22 19:53 ` Jeff King
2 siblings, 0 replies; 13+ messages in thread
From: Jakub Narebski @ 2006-10-22 15:11 UTC (permalink / raw)
To: git
Andy Parkins wrote:
> Git's commit-ish is very powerful. I was wondering however, if there was a
> shortcut for (for example)?
>
> git-diff 3435fdb4c^..3435fdb4c
Thats "git-diff 3435fdb4c^ 3435fdb4c" - diff need pair of things
(one or more might be implied/default), not DAG.
> That is - the short range of a particular commit's parent to that commit; like
>
> git-diff 3435fdb4c!
>
> Or similar.
Or similar. You have to use git-diff-tree, not git-diff as git-diff
uses working tree as second tree if second argument is not given
(and index as first tree if first argument is not given).
$ git diff-tree -p 3435fdb4c
(-p to show patch instead of "whatchanged" output) shows diff to parent
of commit 3435fdb4c (if commit is merge commit, show nothing; use -m
or -c or --cc then).
By the way 3435fdb4c.. means 3435fdb4c..HEAD, and ..3435fdb4c means
HEAD..3435fdb4c (where HEAD means current branch).
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 14:48 Commit-ish shortcut for immediate parent range Andy Parkins
2006-10-22 15:11 ` Jakub Narebski
@ 2006-10-22 17:25 ` Linus Torvalds
2006-10-22 18:25 ` Linus Torvalds
` (2 more replies)
2006-10-22 19:53 ` Jeff King
2 siblings, 3 replies; 13+ messages in thread
From: Linus Torvalds @ 2006-10-22 17:25 UTC (permalink / raw)
To: Andy Parkins; +Cc: git
On Sun, 22 Oct 2006, Andy Parkins wrote:
>
> Git's commit-ish is very powerful. I was wondering however, if there was a
> shortcut for (for example)?
>
> git-diff 3435fdb4c^..3435fdb4c
>
> That is - the short range of a particular commit's parent to that commit; like
>
> git-diff 3435fdb4c!
Umm. That's not actually a very sensible operation. It's only sensible in
the special case of "diff", and for that special case, what we do is to
actually just say that the _command_ is special, not the range.
It's called "git show".
So the thing to do is just
git show 3435fdb4c
and be happy.
Anyway, there's two kinds of commands wrt revision ranges in git:
- "git diff"
- everything else
That may sound strange, but it's true. "git diff" doesn't really do
"revision ranges". It does "two revision endpoints", which is literally
very different from just about any other git command. All the other
commands really think of commits as a "set of individual commits" (where
sometimes the "set" is admittedly just a single commit).
So the reason for you wanting that "3435fdb4c^..3435fdb4c" is not that
it's a particularly useful thing in _general_, it's that "git diff" wants
two endpoints, and you want to have that describe a single commit.
Hopefully this explains why it's the _command_ that is special, and not
the range. The range makes no sense.
Linus
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 17:25 ` Linus Torvalds
@ 2006-10-22 18:25 ` Linus Torvalds
2006-10-22 20:17 ` Andy Parkins
2006-10-22 20:55 ` Johannes Schindelin
2 siblings, 0 replies; 13+ messages in thread
From: Linus Torvalds @ 2006-10-22 18:25 UTC (permalink / raw)
To: Andy Parkins; +Cc: git
On Sun, 22 Oct 2006, Linus Torvalds wrote:
>
> So the thing to do is just
>
> git show 3435fdb4c
>
> and be happy.
Btw, if you really _only_ want the diff, you can do either
git-diff-tree -p 3435fdb4c
which is the traditional "core" command for this. Somewhat sadly, I don't
think we have a way to actually turn _off_ the description printing, so
while you can turn off the _diff_ with "-s", the best you can do wrt the
commit message is probably to use "--pretty=oneline" to cut it down to a
single line.
I wonder if we should have a "--pretty=none" thing, so that you can use
the "higher-level" git commands without seeing the log message.
Hmm..
Linus
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 14:48 Commit-ish shortcut for immediate parent range Andy Parkins
2006-10-22 15:11 ` Jakub Narebski
2006-10-22 17:25 ` Linus Torvalds
@ 2006-10-22 19:53 ` Jeff King
2 siblings, 0 replies; 13+ messages in thread
From: Jeff King @ 2006-10-22 19:53 UTC (permalink / raw)
To: Andy Parkins; +Cc: git
On Sun, Oct 22, 2006 at 03:48:35PM +0100, Andy Parkins wrote:
> Git's commit-ish is very powerful. I was wondering however, if there was a
> shortcut for (for example)?
>
> git-diff 3435fdb4c^..3435fdb4c
>
> That is - the short range of a particular commit's parent to that commit; like
>
> git-diff 3435fdb4c!
>
> Or similar.
I think a more general (but possibly harder to implement and use!) form
would be a commit-ish token for "refer to previous commit-ish." This
would not increase expressiveness, but could save a lot of typing. So if
'!' meant "the last sha1/ref parsed", your example range would be:
3435fdb4c^..!
but you could also do more exotic things like:
3435fdb4c~25..!~20
Obviously you could think of more interesting ways to refer to previous
THINGS. But I think in most cases in which you have repeated refs, you
really are just repeating one ref twice as a basis for a range.
The '!' character is probably a bad choice, since it's generally an
interactive shell metacharacter. I'm not sure what would be a better
choice; we're running low on punctuation.
At any rate, I'm not convinced this is a worthwhile optimization. It's
annoying to have to re-specify a long sha1, but in 99% of cases, you
really are looking for sha1^..sha1. As others have pointed out, that's
already handled through git-show.
-Peff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 17:25 ` Linus Torvalds
2006-10-22 18:25 ` Linus Torvalds
@ 2006-10-22 20:17 ` Andy Parkins
2006-10-22 20:56 ` Linus Torvalds
2006-10-22 20:55 ` Johannes Schindelin
2 siblings, 1 reply; 13+ messages in thread
From: Andy Parkins @ 2006-10-22 20:17 UTC (permalink / raw)
To: git; +Cc: Linus Torvalds
[-- Attachment #1: Type: text/plain, Size: 1026 bytes --]
On Sunday 2006, October 22 18:25, Linus Torvalds wrote:
> Umm. That's not actually a very sensible operation. It's only sensible in
> the special case of "diff", and for that special case, what we do is to
> actually just say that the _command_ is special, not the range.
>
> It's called "git show".
You're entirely correct, that that is what I was looking for in that
particular case. However, the reason I raised it as a question was that I
was poking around with git (which I'm enjoying immensely by the way - it
really is as perfect an SCM as I have ever used) and in short succession did
git-diff X^..X
git-log X^..X
git-format-patch X^..X
I imagined that I would eventually stumble on other git commands where I would
want to do this operation again. I'm sure I will have picked an incorrect
command in each case, however, they all did exactly what I wanted so I
stopped looking for the "right" command :-)
Andy
--
Dr Andrew Parkins, M Eng (Hons), AMIEE
andyparkins@gmail.com
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 17:25 ` Linus Torvalds
2006-10-22 18:25 ` Linus Torvalds
2006-10-22 20:17 ` Andy Parkins
@ 2006-10-22 20:55 ` Johannes Schindelin
2 siblings, 0 replies; 13+ messages in thread
From: Johannes Schindelin @ 2006-10-22 20:55 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Andy Parkins, git
Hi,
On Sun, 22 Oct 2006, Linus Torvalds wrote:
> Anyway, there's two kinds of commands wrt revision ranges in git:
>
> - "git diff"
> - everything else
Well, there is also "git format-patch". If you provide it with only one
commit-ish "<rev>", it will believe you actually meant "<rev>..".
Ciao,
Dscho
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 20:17 ` Andy Parkins
@ 2006-10-22 20:56 ` Linus Torvalds
2006-10-22 21:41 ` Jakub Narebski
0 siblings, 1 reply; 13+ messages in thread
From: Linus Torvalds @ 2006-10-22 20:56 UTC (permalink / raw)
To: Andy Parkins; +Cc: git
On Sun, 22 Oct 2006, Andy Parkins wrote:
>
> You're entirely correct, that that is what I was looking for in that
> particular case. However, the reason I raised it as a question was that I
> was poking around with git (which I'm enjoying immensely by the way - it
> really is as perfect an SCM as I have ever used) and in short succession did
>
> git-diff X^..X
> git-log X^..X
> git-format-patch X^..X
Now, "git show" obviously does exactly what you probably wanted, but for
future reference, the "git log" family of commands also take a "number of
commits" limiter.
So you can also do things like
git log --cc -1 X
and it will actually do something very similar to "git show". It's not
_quite_ identical, but it's close - at least for the special case of a
single commit.
"git show" actually uses a magic "no_walk" internal flag which means that
you can give it _several_ revisions, and it will take them as a raw "list"
of revisions rather than take them as a command to "walk" the revision
space and then just show one of them (like the "git log --cc -1" example
would do).
So with "git show", you can do
git show X Y Z
and it will show those exact three commits. That's _different_ from
git log --cc -3 X Y Z
which will show the three "most recent" commits when you start walking the
revision DAG. (The above "git log" command really doesn't make much sense,
since the output will depend on commit date - it has well-specified
behaviour, but it's really a pretty random thing to do: it might, for
example, show the three commits X, X^ and Z, and not Y at all).
Anyway, "git show" is a very useful thing. It's actually one of the
commands I use most. If I ever want to see what happened in a single
commit (eg somebody sends me a bug-report and says "commit XYZ introduced
a regression"), that's what I would use.
Looking at my history, the commands I tend to use most are:
git log
git diff
git pull <some-remote-repo>
gitk ORIG_HEAD..
git log -p some/directory/or/file
git grep -w <some-identifier> [possibly-some-subdirectory]
git show <some-rev>
and while I think that "git pull" and "gitk ORIG_HEAD.." thing tends to be
something special to being a top-level maintainer (although maybe I'm
wrong - you'd probably do the same just because you're following a remote
tree under active development), all the rest are commands that everybody
should know so intimately that they don't even need to think about them.
"git grep" in particular seems to be something that a lot of people
haven't necessarily even realized is there. Yet it's actually extremely
powerful and efficient both for the "current tree" and for "old
revisions".
It's interesting: I used to do a lot of "plain grep" usage, but with git,
most of my greps by far are all of the form "git grep". I've gotten so
used to it that I find myself wanting to do "git grep" even on non-git
stuff, and if I look at somebody elses tar-ball I often end up doing
git init-db
git add .
just to be able to do "git grep" on it. I've totally stopped doing the
"find . -name '*.[ch]' | xargs grep -w" sequence that I _used_ to do a lot
of.
Linus
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 20:56 ` Linus Torvalds
@ 2006-10-22 21:41 ` Jakub Narebski
2006-10-22 22:09 ` Johannes Schindelin
2006-10-23 3:33 ` Linus Torvalds
0 siblings, 2 replies; 13+ messages in thread
From: Jakub Narebski @ 2006-10-22 21:41 UTC (permalink / raw)
To: git
Linus Torvalds wrote:
> Now, "git show" obviously does exactly what you probably wanted, but for
> future reference, the "git log" family of commands also take a "number of
> commits" limiter.
>
> So you can also do things like
>
> git log --cc -1 X
>
> and it will actually do something very similar to "git show". It's not
> _quite_ identical, but it's close - at least for the special case of a
> single commit.
And of course this shortcut is not documented. git-log(1) and
git-rev-list(1) talks only about "--max-count=<n>", and "-n <n>",
and doesn't talk about possible shortcuts "-n<n>" and "-<n>".
Perhaps because those shortcuts are discouraged?
Additionally you can find "-n <n>" shortcut only further on
the git-rev-list(1).
Patch will follow.
BTW. what does "recursive diff" mean (in git)?
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 21:41 ` Jakub Narebski
@ 2006-10-22 22:09 ` Johannes Schindelin
2006-10-22 22:33 ` Jakub Narebski
2006-10-23 3:33 ` Linus Torvalds
1 sibling, 1 reply; 13+ messages in thread
From: Johannes Schindelin @ 2006-10-22 22:09 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
Hi,
On Sun, 22 Oct 2006, Jakub Narebski wrote:
> BTW. what does "recursive diff" mean (in git)?
AFAIU it means that the diff code recurses into subdirectories.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 22:09 ` Johannes Schindelin
@ 2006-10-22 22:33 ` Jakub Narebski
2006-10-22 23:36 ` Junio C Hamano
0 siblings, 1 reply; 13+ messages in thread
From: Jakub Narebski @ 2006-10-22 22:33 UTC (permalink / raw)
To: git
Johannes Schindelin wrote:
> On Sun, 22 Oct 2006, Jakub Narebski wrote:
>
>> BTW. what does "recursive diff" mean (in git)?
>
> AFAIU it means that the diff code recurses into subdirectories.
When git-diff _doesn't_ recurse into subdirectories?
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 22:33 ` Jakub Narebski
@ 2006-10-22 23:36 ` Junio C Hamano
0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2006-10-22 23:36 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
Jakub Narebski <jnareb@gmail.com> writes:
> Johannes Schindelin wrote:
>
>> On Sun, 22 Oct 2006, Jakub Narebski wrote:
>>
>>> BTW. what does "recursive diff" mean (in git)?
>>
>> AFAIU it means that the diff code recurses into subdirectories.
>
> When git-diff _doesn't_ recurse into subdirectories?
When it is not told to.
The Porcelainish commands (git-diff, git-show) default to
recursive, but low-level commands don't.
Compare these three:
git diff --raw v1.4.3.1^^^..v1.4.3.1^^
git diff-tree v1.4.3.1^^^..v1.4.3.1^^
git diff-tree -r v1.4.3.1^^^..v1.4.3.1^^
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Commit-ish shortcut for immediate parent range
2006-10-22 21:41 ` Jakub Narebski
2006-10-22 22:09 ` Johannes Schindelin
@ 2006-10-23 3:33 ` Linus Torvalds
1 sibling, 0 replies; 13+ messages in thread
From: Linus Torvalds @ 2006-10-23 3:33 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
On Sun, 22 Oct 2006, Jakub Narebski wrote:
>
> BTW. what does "recursive diff" mean (in git)?
For projects with subdirectories (and git itself has almost none), the
default "raw, nonrecursive" diff looks something like this:
f8829caee311207afbc882794bdc5aa0db5caf33
:040000 040000 db7ae247da2ede4d0f932b86771424534d2960b8 9033be5eb62db6fd778793f9f51e28734bb3d9f8 M arch
:040000 040000 c96e5293819986ae7c13a8ef779c5f2066b9575f 5950afceabd99053964778b49df19ba794a21b75 M include
while the same commit with "raw, recursive" looks like
f8829caee311207afbc882794bdc5aa0db5caf33
:100644 100644 88b72c9a84957f2ac787ccf83fa46c4dbb0818d2 2de4d3c367a2c2da9adb6bcf29b5105c46c01f78 M arch/mips/mm/init.c
:100644 100644 4bdaa05f485b446e0d66587015cbd8378abf4a69 4a61e624b0ecfcd921a560d426e92e1df2df1de2 M arch/mips/mm/pgtable-32.c
:100644 100644 44b5e97fff65f75286fdd15f33c2bcf40841082a 8d600d307d5ddb3f617ffc34929ea98d4613b4a7 M arch/mips/mm/pgtable-64.c
:100644 100644 9ab59e2bb23368530fa67c95af0d6ab2c4f7fe8f e3c9925876a3ce4eb80ec67937362cd7d014ad2f M include/asm-mips/cacheflush.h
:100644 100644 6959bdb59310b096ec7797e0a31c78fde5aa9afc 02c8a13fc894838b27336ae42fbb542f87132e01 M include/asm-mips/fixmap.h
ie the "recursive" diff will recurse into subdirectories.
A _patch_ is always recursive (you cannot make a patch-like diff for just
the "tree entry", only for actual blobs), so you can only see this
difference for raw git SHA1 diffs.
Linus
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2006-10-23 3:33 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-22 14:48 Commit-ish shortcut for immediate parent range Andy Parkins
2006-10-22 15:11 ` Jakub Narebski
2006-10-22 17:25 ` Linus Torvalds
2006-10-22 18:25 ` Linus Torvalds
2006-10-22 20:17 ` Andy Parkins
2006-10-22 20:56 ` Linus Torvalds
2006-10-22 21:41 ` Jakub Narebski
2006-10-22 22:09 ` Johannes Schindelin
2006-10-22 22:33 ` Jakub Narebski
2006-10-22 23:36 ` Junio C Hamano
2006-10-23 3:33 ` Linus Torvalds
2006-10-22 20:55 ` Johannes Schindelin
2006-10-22 19:53 ` Jeff King
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).