Re: Branches and all commits

From: Jon Nelson <jnelson-git@jamponi.net>
Date: 2005-12-20 04:39:06
On Mon, 19 Dec 2005, Andreas Ericsson wrote:

> Jon Nelson wrote:
> > Should *all* commits be reachable via at least one branch? I ran into a
> > situation this weekend that has me a little confused. I had performed a
> > number of commits and such and I noticed that the author and committer info
> > had suboptimal values. A bit of searching led me to a comment made by Linus
> > that basically said "go hack git-convert-objects", which I did. After
> > performing git-convert-objects on every commit object in .git/refs/heads and
> > the requisite pruning, etc... just about everything looked fine. However, I
> > still had a long series of commits that contained the wrong information.
> > Further inspection makes it appear as though these commits are not reachable
> > via any branch, although they are /all/ reachable via a series of tags. I
> > worked around the problem by further modifying git-convert-objects to also
> > understand tags (at least the basic ones I've got) and that's all taken care
> > of, but the question remains: should *all* commit objects be reachable by at
> > least one branch?
> > 
> 
> AFAIU, yes.
> 
> For future reference, what you should have done is this;
> 
> $ git format-patch --mbox <first-unscrewed-commit-ish>
> # edit commit-messages in generated patches
> $ git reset --hard <first-unscrewed-commit-ish>
> $ for i in 00*.txt; do git apply < $i; done
> $ git prune;# to get rid of the unreachable objects AFTER you've checked
> everything's all right
> 
> If things fail, do
> 
> $ git reset --hard ORIG_HEAD
> 
> and ask again.
> 
> I'm afraid I can't help you fix up your repository from the state it's 
> in now. AFAIK, there's no tool to do it automagically.

The repository seems just fine with this single exception - no branch 
contains a reference to the commit that forms the chain of commits that 
would otherwise be described as a branch. As I understand it, then, the 
only thing that is missing is an entry in .git/refs/heads.

Experimentally, I added that entry by determining the first commit in 
that chain and echoing that sha1 into .git/refs/heads/some_name and that 
works as expected.

I suspect that the root cause was a 'git branch -D' I issued a while 
back. My question is this: if deleting a branch in that manner caused me 
to enter this situation, is that a bug or no? The commits in question 
*are* referenced by various tags, but not by any branch that exists any 
more.  The echo command effectively re-created the branch and all seems 
well.

--
Jon Nelson <jnelson-git@jamponi.net>
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Tue Dec 20 04:39:54 2005

This archive was generated by hypermail 2.1.8 : 2005-12-20 04:40:02 EST