Sam Vilain <sam@xxxxxxxxxx> writes: > Junio C Hamano wrote: > >>To David, the commits he has in the chain between 6b426e to >>18118c obviously suited the purpose of his tree better, and that >>was why these commits were made. And the fact Linus fast >>forwarded to the tip of David is an implicit statement by Linus >>that that results suits the purpose of Linus tree better as well >>compared to his old tip, presumably 6b426e. > > Aha, now I see reason in the madness. So, the "prior" head is not stored > in the trees, and tracking the progress of actual head transitions is > loosely defined / a research topic. But demonstrably derivable. That > works for me. I do not think there is any madness involved here, but I should point out that the above example happens to work only because Linus and David are two different people. If Linus did the David's work in a separate repository, or even in the same repository but on a separate branch, people following the Linus tip might still want to know about the fast-forward, but that is something you cannot truly tell by the digging like what I did in the previous message. That is why I earlier said this: *1* IOW, we _are_ losing some information by not recording the fact that fast-forward was done while doing so. That record should _not_ be in the commit chain. At the mechanical level, recording that in the commit chain means two criss-crossing branches never converge at the commit chain level, which is already bad. At the philosophical level, the commit chain is a mesh of many possible "global" histories, and the record that somebody (a particular branch in a particular repository) was at what point in the mesh at given time does not belong there. But from the repository-owner's point of view, that _might_ be a useful information to keep. I am just saying this preemptively so that if somebody wants to record it, that should not be recorded in the commit object. I do not think the commit object is the place to record it, even with a purely-comment field like "note prior". The commit ancestry DAG is global in nature, and the information under discussion, "before pointing at this commit, the branch that made this commit happened to point at this other commit", is not. That information describes only one-branch's view of the world, and would not work in the fast-forward case because no new commit is created. An important property of a fast-forward is that we do not create an extra commit object that makes it impossible for two criss-crossing branches to ever converge. On the other hand, a "note" field that records on which branch of which repository each commit was made (you need to give each repository-branch an UUID) when you do create a new commit would be a sensible thing to have if somebody cares deeply enough. It is an information that is global in nature, and with that, you could do the digging like I did without relying on the committer identity, but instead using the branch identity. - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html