* Specifying N revisions after the initial commit @ 2015-09-22 18:32 Josh Boyer 2015-09-22 18:40 ` Konstantin Khomoutov 0 siblings, 1 reply; 7+ messages in thread From: Josh Boyer @ 2015-09-22 18:32 UTC (permalink / raw) To: Git Mailing List Hi All, Please CC me as I'm not subscribed. I was hoping someone could help me with the revision shorthand to get the commit sha of a commit N commits after the initial commit. Thus far I've figured out that to get the initial commit in a repository, you can use: git rev-list --max-parents=0 HEAD but I can't figure out how to get "give me the commit sha1 of the commit immediately after the initial commit", or for some number N. I could always do something like: git rev-list HEAD | tail -2 to get both, but I was curious if there was a refspec shorthand for this that could be used. It seems that git's rev parsing is all built on going backwards in order (and probably rightfully so). Thanks in advance. josh ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 18:32 Specifying N revisions after the initial commit Josh Boyer @ 2015-09-22 18:40 ` Konstantin Khomoutov 2015-09-22 19:10 ` Josh Boyer 0 siblings, 1 reply; 7+ messages in thread From: Konstantin Khomoutov @ 2015-09-22 18:40 UTC (permalink / raw) To: Josh Boyer; +Cc: Git Mailing List On Tue, 22 Sep 2015 14:32:19 -0400 Josh Boyer <jwboyer@gmail.com> wrote: > Please CC me as I'm not subscribed. > > I was hoping someone could help me with the revision shorthand to get > the commit sha of a commit N commits after the initial commit. What happens if right after the initial commit, there have been five branches created -- with no common commits except for the initial one? That's the core limitation of the data model Git uses (and arguably any other DVCS system): all commits form a directed acyclic graph. The "directed" in that construct means that child commits contain a link to their parent commit (or commits) but not vice-versa. Hence, given any particular commit, you're able to trace all of its ancestry, but the reverse is not possible. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 18:40 ` Konstantin Khomoutov @ 2015-09-22 19:10 ` Josh Boyer 2015-09-22 19:55 ` Junio C Hamano 0 siblings, 1 reply; 7+ messages in thread From: Josh Boyer @ 2015-09-22 19:10 UTC (permalink / raw) To: Konstantin Khomoutov; +Cc: Git Mailing List On Tue, Sep 22, 2015 at 2:40 PM, Konstantin Khomoutov <kostix+git@007spb.ru> wrote: > On Tue, 22 Sep 2015 14:32:19 -0400 > Josh Boyer <jwboyer@gmail.com> wrote: > >> Please CC me as I'm not subscribed. >> >> I was hoping someone could help me with the revision shorthand to get >> the commit sha of a commit N commits after the initial commit. > > What happens if right after the initial commit, there have been five > branches created -- with no common commits except for the initial one? > > That's the core limitation of the data model Git uses (and arguably any > other DVCS system): all commits form a directed acyclic graph. > The "directed" in that construct means that child commits contain a > link to their parent commit (or commits) but not vice-versa. Hm. It has been so long since I've looked at the underlying model and git has proven to be so flexible on such a variety of things that I guess I forgot it was constructed through a DAG. The --reverse parameter to git-log and git-rev-parse had left me hopeful. > Hence, given any particular commit, you're able to trace all of its > ancestry, but the reverse is not possible. That makes sense. I suppose I will have to resort to parsing output of git-rev-list or something. Thanks for the reminder. josh ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 19:10 ` Josh Boyer @ 2015-09-22 19:55 ` Junio C Hamano 2015-09-22 20:11 ` Josh Boyer 0 siblings, 1 reply; 7+ messages in thread From: Junio C Hamano @ 2015-09-22 19:55 UTC (permalink / raw) To: Josh Boyer; +Cc: Konstantin Khomoutov, Git Mailing List Josh Boyer <jwboyer@gmail.com> writes: > On Tue, Sep 22, 2015 at 2:40 PM, Konstantin Khomoutov > ... >> Hence, given any particular commit, you're able to trace all of its >> ancestry, but the reverse is not possible. > > That makes sense. I suppose I will have to resort to parsing output > of git-rev-list or something. Thanks for the reminder. I think Konstantin explained why it fundamentally does not make sense to ask "which one is the Nth one after the root". I am not sure how running rev-list and count its output would help, unless you are now solving a different problem (perhaps "find all the ones that are Nth after some root", which does have an answer). ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 19:55 ` Junio C Hamano @ 2015-09-22 20:11 ` Josh Boyer 2015-09-22 20:40 ` Theodore Ts'o 0 siblings, 1 reply; 7+ messages in thread From: Josh Boyer @ 2015-09-22 20:11 UTC (permalink / raw) To: Junio C Hamano; +Cc: Konstantin Khomoutov, Git Mailing List On Tue, Sep 22, 2015 at 3:55 PM, Junio C Hamano <gitster@pobox.com> wrote: > Josh Boyer <jwboyer@gmail.com> writes: > >> On Tue, Sep 22, 2015 at 2:40 PM, Konstantin Khomoutov >> ... >>> Hence, given any particular commit, you're able to trace all of its >>> ancestry, but the reverse is not possible. >> >> That makes sense. I suppose I will have to resort to parsing output >> of git-rev-list or something. Thanks for the reminder. > > I think Konstantin explained why it fundamentally does not make > sense to ask "which one is the Nth one after the root". I am not > sure how running rev-list and count its output would help, unless > you are now solving a different problem (perhaps "find all the ones > that are Nth after some root", which does have an answer). Oh, context would help, yes. In the case of the tree I'm parsing, I know for a fact that the commit history is entirely linear and will (should) always remain so. E.g. A - B - C - D - E - F ... {N} So yes, finding e.g. the second commit after the root is complicated for something resembling anything like a typical git repo, but this isn't like that. In other words, I can cheat. Or at least I'm pretty sure I can cheat :). josh ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 20:11 ` Josh Boyer @ 2015-09-22 20:40 ` Theodore Ts'o 2015-09-22 20:42 ` Junio C Hamano 0 siblings, 1 reply; 7+ messages in thread From: Theodore Ts'o @ 2015-09-22 20:40 UTC (permalink / raw) To: Josh Boyer; +Cc: Junio C Hamano, Konstantin Khomoutov, Git Mailing List On Tue, Sep 22, 2015 at 04:11:23PM -0400, Josh Boyer wrote: > Oh, context would help, yes. In the case of the tree I'm parsing, I > know for a fact that the commit history is entirely linear and will > (should) always remain so. E.g. > > A - B - C - D - E - F ... {N} > > So yes, finding e.g. the second commit after the root is complicated > for something resembling anything like a typical git repo, but this > isn't like that. In other words, I can cheat. Or at least I'm pretty > sure I can cheat :). I'd suggest making your script makes sure "git rev-list --merges A..N" doesn't output any commits, so you know for sure that the commit history is linear. That way you'll be certain that you can cheat. :-) - Ted ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Specifying N revisions after the initial commit 2015-09-22 20:40 ` Theodore Ts'o @ 2015-09-22 20:42 ` Junio C Hamano 0 siblings, 0 replies; 7+ messages in thread From: Junio C Hamano @ 2015-09-22 20:42 UTC (permalink / raw) To: Theodore Ts'o; +Cc: Josh Boyer, Konstantin Khomoutov, Git Mailing List Theodore Ts'o <tytso@mit.edu> writes: > On Tue, Sep 22, 2015 at 04:11:23PM -0400, Josh Boyer wrote: >> Oh, context would help, yes. In the case of the tree I'm parsing, I >> know for a fact that the commit history is entirely linear and will >> (should) always remain so. E.g. >> >> A - B - C - D - E - F ... {N} >> >> So yes, finding e.g. the second commit after the root is complicated >> for something resembling anything like a typical git repo, but this >> isn't like that. In other words, I can cheat. Or at least I'm pretty >> sure I can cheat :). > > I'd suggest making your script makes sure "git rev-list --merges A..N" > doesn't output any commits, so you know for sure that the commit > history is linear. That way you'll be certain that you can cheat. :-) There are histories with multiple roots without any merges, in which case you cannot ;-) ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-09-22 20:42 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-22 18:32 Specifying N revisions after the initial commit Josh Boyer 2015-09-22 18:40 ` Konstantin Khomoutov 2015-09-22 19:10 ` Josh Boyer 2015-09-22 19:55 ` Junio C Hamano 2015-09-22 20:11 ` Josh Boyer 2015-09-22 20:40 ` Theodore Ts'o 2015-09-22 20:42 ` Junio C Hamano
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.