One of the biggest surprises for me when learning Git was the fact that revisions are not permanently associated with a particular branch; rather, the branch simply indicates a specific revision. When I fully understood this concept, I realized that I did not understand how to really use this function properly.
I read, apparently, the famous essay on the successful Git forking model , which displays branches as strings, as well as revisions as being clearly linked to one line. Consider this passage:

Two function branches are shown here (name them featureA and featureB ) and the develop branch. Moreover, featureB completely merged with develop , and then again diverged, only for re-merging.
It looks beautiful, neat and understandable, and it also happens that the repo will literally look at the end of this process in something like Mercurial. As I understand it, I like it, and I would like to develop this way (and I did it in Mercurial). However, in Git, the final state does not look like this. It looks like this:

In other words, the only information that we have about the two branches of features is that they now have the same revision as the development branch. As a result, we can do our best for the whole tree:

In other words, all this good information about the history of how the development took place is lost; he never recorded in the first place. Notice how in the first chart the three revisions are clearly on featureB before they are merged into develop , but I don’t see how we can know that these three revisions were on featureB before the merge.
It is right? Is it the above, I can recover from a fact in Git, and so the screenshot from the essay is more likely to be misleading? Or is there something important that I'm missing?