I still do not understand why we need any ancestor in the GitModel. An ancestor is used by the synchronize framework to calculate the entries for the three way compare. But in GitModel we just compare to the parent, don't we? I still would say that we should return null in GitModelBlob.getAncestor (javadoc: Returns null if this input has no ancestor or in the two-way compare case.)

When there is more than one parent things of course get more complicated. But returning any ancestor commit is definitely wrong.