VCS comparison table
Linus Torvalds
torvalds at osdl.org
Wed Oct 18 00:50:22 BST 2006
On Wed, 18 Oct 2006, Jakub Narebski wrote:
>
> Merge commit in fast-forward case is only marking "here we did a pull"
> (here we downloaded from other repository). It is just a marker which
> place is in reflog, not in history. It is only cluttering history.
For non-git people (and maybe even git people who didn't follow some of
the "reflog" work):
- git does actually have "local view" support, but it is very much
_defined_ to be local. It does not pollute any history as seen by
anybody else. It's called "reflog" (where "ref" is just the git name
for any reference into a tree, and the "log" part is hopefully obvious)
So each git repository can have (if you enable it) a full log of all the
changes to each branch. But it's not in the core git datastructures that
get replicated - because the local view of how the branches have changed
really _is_ just a local view. It's just a local log to each repository
(actually, one per branch).
It's what allows a git person to say
git diff "master@{5.hours.ago}"
because while "5 hours ago" is _not_ well-defined in a distributed
environment (five hours ago for _whom_?) it's perfectly well-defined in a
purely _local_ sense of one particular branch.
So there's no need for a fakey "merge" that isn't a real merge and that
doesn't make sense for anybody else because it doesn't actually add any
real knowledge about the _history_ of the tree (only about a single
repository). If you want to see how the history of a particular repository
has evolved, you can just look at the reflog (although admittedly, common
tools like "gitk" don't even show it - the data is there if they would
want to, but the most common usage is the above kind of "show me what
happened in the last five hours in my current branch".
Linus
More information about the bazaar
mailing list