Question: I read somewhere that one of few weaknesses in data binding model is that you never explicitly handle or create the data object that’s bound to the control and as a result you don’t have a chance to add an extra item. But I’m not sure what is meant by that.

What or how exactly would you be able to add an extra item if you were allow to explicitly create a data object? Would you basically be able to bind control to data source and let the runtime automatically fill the control with data source’s data , and additionally that control could also get an extra item from data source by manually creating it?! How would it be able to do that?! 

thanx

Answer: 
If you look at the file that is conflicted, you'll notice the standard `Theirs >>>>>>>` and `<<<<<< Mine` markers. WinMerge understands these as merge conflicts, so it does not need 'Theirs' and 'Mine' to be specified explicitly; it just needs to be told which file it is that has the conflict markers.

1. We know the file in the working directory contains the markers.
2. It makes sense that the file we are merging to will also be this file - we also know that `git mergetool` makes the `$MERGED` variable available that names that file.

```
[mergetool "winmerge"]
    cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\"

```

This is all you need to hook git up with WinMerge for merge/conflict resolution; no scripts or command-line switches needed. Refer to the 3rd command-line form in the docs (linked by the OP, above) and the explanation of `conflictfile` argument.
```
[mergetool "winmerge"]
    cmd = winmergeu -e -ub -wl -dl "Remote" -dr "Local" "$PWD/$REMOTE" "$PWD/$LOCAL" "$PWD/$MERGED"
    keepBackup = false

```

If you look inside `C:\Program Files\Git\share\git-gui\lib\mergetool.tcl` it has syntax for common merge tools.

I'm still trying to figure out how to invoke mergetool directly from Git GUI...