When you give an annotated but unsigned tag to "git merge", if the tagged commit does not fast-forward, we create a merge commit and the tagged commit (not the tag itself) becomes one of the parents of the resulting merge commit. The merge commit log contains the message from the annotated tag. When the tagged commit is a descendant of the current HEAD, however, we used to simply fast-forward such a merge (losing the content of the annotated tag). Post 1.7.9, we no longer do so. These three create a merge commit for an annotated tag "anno" that points at a commit that is a descendant of the HEAD: $ git merge anno $ git merge --ff anno $ git merge --no-ff anno You can force fast-forwarding with: $ git merge anno^0 but you obvously cannot record the contents of the annotated tag, as there is no new commit to record it. The "--ff" option has always meant "allow fast-forward", i.e. "if the merge can be fast-forwarded, do so without creating a new merge commit", and without any of the "ff"-related options, the command defaults to allow fast-forwarding. "--no-ff" is "I always want a new merge commit made", and "--ff-only" is "fail the command if it cannot be fast-forwarded". In effect, in the post 1.7.9 world, we consider that an annotated tag is what you cannot fast-forward to. The above definition was loosened slightly with b5c9f1c (merge: do not create a signed tag merge under --ff-only option, 2012-02-05). "--ff-only" is taught to consider an annotated or signed tag that points at a commit that can be fast-forwarded as what you can fast-forward to, so that a user following along without adding anything can do this: $ git checkout v3.2.0 $ git pull --ff-only v3.3.0 without creating an extra merge commit. This two-patch series further loosens the definition by considering that an annotated but unsigned tag can be fast-forwarded as long as it points at a commit that can be fast-forwarded to. So $ git merge anno $ git merge --ff anno will now fast-forward (note that this will *not* happen for signed tags). I find this change somewhat iffy myself, as we are encouraging people to lose information (i.e. the contents of the annotated tag is no longer recorded in the history) and some may see it as a regression in the post 1.7.10 world because of that. But since I've written it already, I thought it might be worth showing it to the list for discussion, if only to publicly reject the idea ;-). Junio C Hamano (2): merge: separte the logic to check for a signed tag merge: allow fast-forwarding to an annotated but unsigned tag builtin/merge.c | 26 ++++++++++++++++++++++---- t/t7600-merge.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) -- 1.7.11.rc1.37.g09843ac -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html