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
next prev parent 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).