Keeping reflogs on branch deletion
- From
Brian Downing <bdowning@lavos.net>
- Date
- Feb 14, 2008, 14:01 UTC
- Message-ID
- <20080214140152.GT27535@lavos.net>
- In-Reply-To
- <7vr6fgkxt2.fsf@gitster.siamese.dyndns.org>
On Wed, Feb 13, 2008 at 07:43:21PM -0800, Junio C Hamano wrote:
Show 8 quoted lines
> People often mistake that the safety of "branch -d" is to not > lose the commit (i.e. not making it unreachable), but that is > not the case. That safety already exists in HEAD reflogs. > > The "branch -d" safety is about not losing the particular point. > The information we really are trying to protect is "this branch > points at _that commit_", which is just as important if not > more.
This actually brings up something I've been intending to ask.
When deleting a branch, is there any reason we can't add a deletion entry into the reflog and keep the reflog around? This would seem to be a lot safer; I know I've been burned by expecting the reflog safety net to be there, and surprised that it's not when I've deleted a branch.
I expect that the reflog entry would look something like this:
0000000000000000000000000000000000000000 4685dfedd47683a476e75166b5c273c0269b7e54 Brian Downing <bdowning@lavos.net> 1202996833 -0600 branch: Created from ubuntu-dapper 4685dfedd47683a476e75166b5c273c0269b7e54 0000000000000000000000000000000000000000 Brian Downing <bdowning@lavos.net> 1202996863 -0600 branch: Deleted
A couple of problems I've noticed that would have to be fixed for this to work:
* git log -g (and anything else that can take a reflog) would have to be fixed or modified to allow for taking branches that no longer exist:
:; ls .git/logs/refs/heads/foo .git/logs/refs/heads/foo :; git log -g foo fatal: ambiguous argument 'foo': unknown revision or path not in the working tree. Use '--' to separate paths from revisions
My uneducated suspicion is that this may be somewhat hard.
* If the above did work, it would be nice for the deletion entry to result in a nice "branch was deleted" entry in log -g output. Today, that entry is missing in its entirety.
-bcd