Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxx> writes: > Yes, that's my pain. I don't want ff only when pulling from others, > only when pulling from upstream tree. > >> >> We may want per-remote equivalent for it, i.e. e.g. >> >> [pull] >> ff=false ;# good default for collecting contributions >> >> [remote "torvalds"] >> pullFF = only ;# good default for catching up >> >> or something like that, perhaps? > > > Yeah, something like that works. Please notice, however, that what I > usually do is: > > $ git remote update torvalds > $ git merge <tag> > (or git pull . <tag>) > > So, for the above to work, it should store somehow the remote from > where a tag came from. That makes me wonder if another heuristic I floated earlier is more appropriate. When merging a tag object T, if refs/tags/T exists and it is that tag object, then an updated "merge" would default to "--ff"; otherwise, it would keep the current default of creating a merge even when we could fast-forward, in order to record that tag T in the resulting history. Of course, end users can use command line options to override such heuristics anyway, but if the behaviour based on the new heuristic is easy to explain and understand, and covers majority of the use cases without command line override, then we might not even need a new configuration mechanism like remove.torvalds.pullFF mentioned above.