git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Linus Torvalds <torvalds@osdl.org>
To: Russell King <rmk@arm.linux.org.uk>
Cc: Petr Baudis <pasky@ucw.cz>, Git Mailing List <git@vger.kernel.org>
Subject: Re: Re-done kernel archive - real one?
Date: Mon, 18 Apr 2005 14:56:47 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.58.0504181440020.15725@ppc970.osdl.org> (raw)
In-Reply-To: <20050418223359.A16789@flint.arm.linux.org.uk>



On Mon, 18 Apr 2005, Russell King wrote:
> 
> Since this happened, I've been working out what state my tree is in,
> and I restored it back to a state where I had one dangling commit head,
> which was _my_ head.

For the future, if your tree gets messed up to the point where you say 
"screw it" and just want to go back in time, you can do this (it's 
equivalent to "undo" in BK speak):

	git log | less -S

	.. find which HEAD it was that you trusted..

In this case your HEAD before I merged with it was this one:

	df4449813c900973841d0fa5a9e9bc7186956e1e

So to get back to that one, you can do

	echo df4449813c900973841d0fa5a9e9bc7186956e1e > .git/HEAD

and now

	cat-file commit $(cat .git/HEAD) | head -1

gives you

	tree a43c4447b2edc9fb01a6369f10c1165de4494c88

so you can restore your checked-out state with

	read-tree a43c4447b2edc9fb01a6369f10c1165de4494c88
	checkout-cache -f -a
	update-cache --refresh

and your tree should be valid again.

Now, to remove any bogus objects, you can then run my "git-prune-script"
(look at it carefully first to make sure you realize what you are doing).

NOTE NOTE NOTE! This will _revert_ everything you had done after the 
"trusted" point. So you may not actually want to do this. Instead:

> It's very much like I somehow committed against the _parent_ of the
> head, rather than the head itself.

That's very common if you just forget to update your new ".git/HEAD" when 
you do a commit.

Again, it's the tools that make it a bit too easy to mess up. The 
"commit-tree" thing is supposed to really only be used from scripts (which 
would do something like

	result=$(commit-tree ...) && echo $result > .git/HEAD

but when doing things by hand, if you forget to update your HEAD, your 
next commit will be done against the wrong head, and you get dangling 
commits.

The good news is that this is not that hard to fix up. The _trees_ are all
correct, and the objects are all correct, so what you can do is just
generate a few new (proper) commit objects, with the right parents. Then
you can do the "git-prune-script" thing that will throw away the old
broken commits, since they won't be reachable from your new commits (even
though their _trees_ will be there and be the same).

So in this case:

	b4a9a5114b3c6da131a832a8e2cd1941161eb348
	+- e7905b2f22eb5d5308c9122b9c06c2d02473dd4f
	   +- dc90c0db0dd5214aca5304fd17ccd741031e5493 <-- extra dangling head
	   +- 488faba31f59c5960aabbb2a5877a0f2923937a3

you can do

	cat-file commit dc90c0db0dd5214aca5304fd17ccd741031e5493

to remind you what your old tree and commit message was, and then just 
re-commit that tree with the same message but with the proper parent:

	commit-tree xxxx -p 488faba31f59c5960aabbb2a5877a0f2923937a3

and then you need to do the same thing for the other commits (which will 
now need to be re-based to have the new commit-chain as their parents).

Then, when you fixed up the final one, remember to update .git/HEAD with 
its commit ID, and now the prune-thing will get rid of the old dangling 
commits that you just created new duplicates of.

		Linus

  reply	other threads:[~2005-04-18 21:51 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-16 23:01 Re-done kernel archive - real one? Linus Torvalds
2005-04-17 15:24 ` Russell King
2005-04-17 16:28   ` Petr Baudis
2005-04-17 16:36   ` Linus Torvalds
2005-04-17 18:57     ` Russell King
2005-04-17 19:33       ` Linus Torvalds
2005-04-17 19:45         ` Linus Torvalds
2005-04-17 19:51         ` Russell King
2005-04-17 20:08           ` Linus Torvalds
2005-04-17 20:11             ` Russell King
2005-04-17 20:26               ` Linus Torvalds
2005-04-17 20:42                 ` Russell King
2005-04-18 22:16       ` Russell King
2005-04-18 22:33         ` Petr Baudis
2005-04-18 23:29         ` Linus Torvalds
2005-04-18 23:53         ` Petr Baudis
2005-04-17 16:05 ` Russell King
2005-04-17 16:44   ` Linus Torvalds
2005-04-17 18:13     ` David A. Wheeler
2005-04-17 18:14       ` Petr Baudis
2005-04-17 18:20       ` Russell King
2005-04-17 18:44         ` David A. Wheeler
2005-04-18 11:15         ` Martin Schlemmer
2005-04-17 20:21 ` H. Peter Anvin
2005-04-17 21:50 ` Jochen Roemling
2005-04-17 22:09   ` Randy.Dunlap
2005-04-17 22:30     ` Petr Baudis
2005-04-17 21:52 ` David Woodhouse
2005-04-17 22:17   ` Linus Torvalds
2005-04-17 22:19     ` Russell King
2005-04-17 22:51       ` Russell King
2005-04-17 23:24         ` Linus Torvalds
2005-04-18  9:23           ` Russell King
2005-04-18 11:14             ` Martin Schlemmer
2005-04-18 11:15             ` Petr Baudis
2005-04-18 15:23             ` Linus Torvalds
2005-04-18 17:05               ` Linus Torvalds
2005-04-18 18:07                 ` Petr Baudis
2005-04-18 21:53               ` Russell King
2005-04-18 22:01                 ` Linus Torvalds
2005-04-18 22:48                 ` Petr Baudis
2005-04-18 22:59                   ` Russell King
2005-04-18 23:09                     ` Petr Baudis
2005-04-19  7:27                       ` Russell King
2005-04-18 23:31                   ` Linus Torvalds
2005-04-18 21:33             ` Russell King
2005-04-18 21:56               ` Linus Torvalds [this message]
2005-04-18 14:22           ` Petr Baudis
2005-04-18 15:04           ` Greg KH
2005-04-18 15:25             ` Randy.Dunlap
2005-04-18 15:42             ` Linus Torvalds
2005-04-18 22:05               ` Greg KH
2005-04-18 22:14                 ` Greg KH
2005-04-18 23:16                   ` Linus Torvalds
2005-04-18 23:26                     ` Greg KH
2005-04-18 23:10                 ` Linus Torvalds
2005-04-17 22:20     ` H. Peter Anvin
2005-04-17 22:22     ` randy_dunlap
2005-04-17 23:21       ` David Woodhouse
2005-04-18  1:33         ` randy_dunlap

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.58.0504181440020.15725@ppc970.osdl.org \
    --to=torvalds@osdl.org \
    --cc=git@vger.kernel.org \
    --cc=pasky@ucw.cz \
    --cc=rmk@arm.linux.org.uk \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).