It would matter in this situation:
In the beginning:
function A(){
return 1;
}
Now commit this in one branch:
function B(){
return 1;
}
function A(){
return 1;
}
then this:
function A(){
return 1;
}
function B(){
return 1;
}
function A(){
return 1;
}
And then this in another branch off the base:
function A(){
return 2;
}
Now merge the two end points. Which is correct? This, assuming a purely line-based diff:
function A(){
return 2;
}
function B(){
return 1;
}
function A(){
return 1;
}
or this, assuming knowledge of the history of events?
function A(){
return 1;
}
function B(){
return 1;
}
function A(){
return 2;
}
In Javascript, where such code is acceptable, `A()` now returns 1 or 2.
In Git, or by applying patches manually, it depends on the order in which you merge. If you merge the `B()A()` branch with the `return 2` branch and then the `A()B()A()` one, you'll get the second result. But if you merge the `A()B()A()` directly with the `return 2` branch, you'll get first one. The same set of changes producing different outcomes.
In Darcs, the history between `A()`, `B()A()`, and `A()B()A()` are checked, and it's seen that the second `A()` is the "original" one, so the `return 2` is applied to that one.
Which means that you won't necessarily get the same behavior merging two Darcs patches as you would merging it within the repository, where there is a history. Git behaves exactly as if you were dealing with patches. I side with Git on this, personally, but it's a valid point - you have history, why not use it?