[Python-Dev] PEP 481 - Migrate Some Supporting Repositories to Git and Github (original) (raw)

Donald Stufft donald at stufft.io
Mon Dec 1 01:30:59 CET 2014


On Nov 30, 2014, at 7:17 PM, Ben Finney <ben+python at benfinney.id.au> wrote:

Donald Stufft <donald at stufft.io> writes:

I have never heard of git losing history. In my experience talking with Git users about this problem, that depends on a very narrow definition of “losing history”. Git encourages re-writing, and thereby losing prior versions of, the history of a branch. The commit information remains, but the history of how they link together is lost. That is a loss of information, which is not the case in the absence of such history re-writing. Git users differ in whether they consider that information loss important; but it is, objectively, losing history information. So Ethan's impression is correct on this point.

It’s not lost, the only thing that’s “gone” is a pointer to the HEAD commit of that branch. Each commit points to it’s parent commit so if you find the HEAD and give it a name you’ll restore the branch. It just so happens inside the reflog you’ll see a list of the old HEADs of branches so you can get the old commit ID from the HEAD there. In addition depending on how you rewrote the branch and if you did anything else there is likely a reference to the old head at ORIG_HEAD. If you don’t have the reflog (this is per copy of the repository, so a different computer or deleting the repo and recreating it will lose it) and for similar reasons you don’t have the ORIG_HEAD, if you have any reference to the previous HEAD (email, commit messages, whatever) that’s enough to restore it assuming that the commits have not been garbage collected yet (which happens in 90 days or 30 days depending on what kind of unreferenced commit it is) you can restore it.

The important thing to realize is that a “branch” isn’t anything special in git. All a branch does is act as a sort of symlink to a commit ID. Anything more beyond “what is the HEAD commit in this branch” is stored as part of the commits themselves and doesn’t rely on the branch to be named.


Donald Stufft PGP: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA



More information about the Python-Dev mailing list