From: Jeff King <peff@peff.net>
To: Pavan Kumar Sunkara <pavan.sss1991@gmail.com>
Cc: Git List <git@vger.kernel.org>
Subject: Re: Walking commits from the first
Date: Mon, 15 Feb 2010 03:06:46 -0500 [thread overview]
Message-ID: <20100215080646.GD5347@coredump.intra.peff.net> (raw)
In-Reply-To: <e72faaa81002142039h5531a19y354d24e595295bb1@mail.gmail.com>
On Mon, Feb 15, 2010 at 10:09:02AM +0530, Pavan Kumar Sunkara wrote:
> When you clone a big git repository and would like to read and
> understand the source code, you need to checkout and read every commit
> right from the first commit. As per my knowledge, there is no command
> (even with flags) to checkout the first commit of the repository.
>
> If there is some command, please put it in user's manual
In most repositories, you can do this:
git checkout `git rev-list --reverse HEAD | head -n 1`
but...
> I know that every git commit is a vertice in a DAG which has it's edge
> pointed to it's parent. So, walking from the latest commits to old
> commits is easy but the reverse is not.
> I would like to know if there is any problem if we make the walking
> bidirectional. What i mean is, when a new commit is created, create an
> edge not only from it to it's parent but also from it's parent to it.
> Also, have something for the first commit of the repo which can be
> referred as INIT (similiar to HEAD)
It is not as simple as that, for two reasons.
For walking backwards, you can take multiple paths from merge commits
(which have multiple parents). So there may actually be several "first
commits" if unrelated lines of development were merged together. For
example, in git.git:
$ git log --format='%h %p' |
grep ' $'
16d6b8a
cb07fc2
161332a
1db95b0
2744b23
e83c516
There are six root commits. You can see what they are by piping the
above into "tr -d ' ' | git log --no-walk --stdin".
For your "--next" suggestion, it is even worse. There may be an infinite
number of commits that point to a given commit as the parent. So there
is no such thing as "what came next from X". You can only ask
"leading up to some commit Y which is a descendant of X, what was the
commit that came after X". But while there are a finite number of
answers, there is not necessarily just one. If two branches diverged at
X and then remerged before Y, they are both equally "next".
-Peff
next prev parent reply other threads:[~2010-02-15 8:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <e72faaa81002142037g7f5f518erb9fefbb239124bc5@mail.gmail.com>
2010-02-15 4:39 ` Walking commits from the first Pavan Kumar Sunkara
2010-02-15 8:06 ` Jeff King [this message]
2010-02-15 11:33 ` Pavan Kumar Sunkara
2010-02-15 14:05 ` Jon Seymour
2010-02-15 14:20 ` Jon Seymour
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100215080646.GD5347@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=pavan.sss1991@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).