git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Documentation: merging a tag is a special case

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 21, 2013, 19:50 UTC
Message-ID
<7vmwtwa5xa.fsf@alter.siamese.dyndns.org>
In-Reply-To
<7vboadevpk.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 21 quoted lines
>> +MERGING TAG
>> +-----------
>> +
>> +When merging a tag (annotated or signed), Git will create a merge commit
>> +...
>> +if the tag was signed. See also linkgit:git-tag[1].
>> +
>
> It would make it more helpful to readers to describe how _not_ to
> create such a merge commit if it is unwanted, and how the request to
> merge a tag interacts with --ff-only option.
>
>> @@ -26,7 +26,7 @@ set to `no` at the beginning of them.
>>  --ff::
>>  	When the merge resolves as a fast-forward, only update the branch
>>  	pointer, without creating a merge commit.  This is the default
>> -	behavior.
>> +	behavior (except when merging a tag).
>
> With this update, the reader will be left wondering what would be
> the default when she asks Git to merge a tag, no?

Taking Jonathan's input and the above into account, perhaps we can do something like this on top of the posted patch?

 Documentation/git-merge.txt     | 26 +++++++++++++++++++++-----
 Documentation/merge-options.txt |  5 +++--
 2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt
index f7e68e1..75b5ee7 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.txt
@@ -173,11 +173,27 @@ want to start over, you can recover with `git merge --abort`.
 MERGING TAG
 -----------
 
-When merging a tag (annotated or signed), Git will create a merge commit
-even if a fast-forward merge is possible (see above).
-The commit message template will be created from the tag message.
-Additionally, the signature check will be reported as a comment
-if the tag was signed. See also linkgit:git-tag[1].
+When merging an annotated (and possibly signed) tag, Git always
+creates a merge commit even if a fast-forward merge is possible, and
+the commit message template is prepared with the tag message.  
+Additionally, the signature check is reported as a comment
+if the tag is signed.  See also linkgit:git-tag[1].
+
+Consequently a request `git merge --ff-only v1.2.3` to merge such a
+tag would fail.
+
+When you want to just integrate with the work leading to the commit
+that happens to be tagged, e.g. synchronizing with an upstream
+release point, you may not want to make an unnecessary merge commit
+especially when you do not have any work on your own.  In such a
+case, you can "unwrap" the tag yourself before feeding it to `git
+merge`, e.g.
+
+---
+git fetch origin
+git merge [--ff-only] v1.2.3^0
+---
+
 
 HOW CONFLICTS ARE PRESENTED
 ---------------------------
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 70d1ec0..34a8445 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -26,11 +26,12 @@ set to `no` at the beginning of them.
 --ff::
 	When the merge resolves as a fast-forward, only update the branch
 	pointer, without creating a merge commit.  This is the default
-	behavior (except when merging a tag).
+	behavior.
 
 --no-ff::
 	Create a merge commit even when the merge resolves as a
-	fast-forward.
+	fast-forward.  This is the default behaviour when merging an
+	annotated (and possibly signed) tag.
 
 --ff-only::
 	Refuse to merge and exit with a non-zero status unless the
Previous: Junio C HamanoNext: Jonathan Nieder
Message 15 of 53 in “git merge <tag> behavior”
  1. Yann DroneaudMar 19, 2013
  2. Junio C HamanoMar 19, 2013
  3. Re* git merge <tag> behaviorJunio C Hamano, Mar 19, 2013
  4. 0/3 Merging an annotated tag objectJunio C Hamano, Apr 1, 2013
  5. 1/3 merge: a random object may not necssarily be a commitJunio C Hamano, Apr 1, 2013
  6. Yann DroneaudApr 1, 2013
  7. Jeff KingApr 2, 2013
  8. Junio C HamanoApr 2, 2013
  9. Jeff KingApr 2, 2013
  10. 2/3 t6200: use test_config/test_unconfigJunio C Hamano, Apr 1, 2013
  11. 3/3 t6200: test message for merging of an annotated tagJunio C Hamano, Apr 1, 2013
  12. Documentation: merging a tag is a special caseYann Droneaud, Mar 20, 2013
  13. Jonathan NiederMar 20, 2013
  14. Junio C HamanoMar 20, 2013
  15. Junio C HamanoMar 21, 2013
  16. Jonathan NiederMar 21, 2013
  17. Junio C HamanoMar 21, 2013
  18. Jonathan NiederMar 21, 2013
  19. Yann DroneaudMar 21, 2013
  20. Documentation: merging a tag is a special caseYann Droneaud, Mar 21, 2013
  21. Jonathan NiederMar 21, 2013
  22. Yann DroneaudMar 20, 2013
  23. Yann DroneaudMar 20, 2013
  24. Junio C HamanoMar 20, 2013
  25. Max NanasyMar 21, 2013
  26. Yann DroneaudMar 22, 2013
  27. t7600: test merge configuration overrideYann Droneaud, Mar 22, 2013
  28. Junio C HamanoMar 22, 2013
  29. 00/15 Use test_configYann Droneaud, Mar 24, 2013
  30. 01/15 t4018: remove test_config implementationYann Droneaud, Mar 24, 2013
  31. 02/15 t7810: remove test_config implementationYann Droneaud, Mar 24, 2013
  32. 03/15 t7811: remove test_config implementationYann Droneaud, Mar 24, 2013
  33. 04/15 t3400: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  34. 05/15 t4304: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  35. 06/15 t4034: use test_config/test_unconfig to set/unset git config variablesYann Droneaud, Mar 24, 2013
  36. 07/15 t4202: use test_config/test_unconfig to set/unset git config variablesYann Droneaud, Mar 24, 2013
  37. 08/15 t5520: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  38. 09/15 t5541: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  39. 10/15 t7500: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  40. 11/15 t7502: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  41. 12/15 t7508: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  42. 13/15 t7600: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  43. 14/15 t9500: use test_config to set/unset git config variablesYann Droneaud, Mar 24, 2013
  44. 15/15 t7502: remove clear_configYann Droneaud, Mar 24, 2013
  45. Junio C HamanoMar 27, 2013
  46. Junio C HamanoMar 27, 2013
  47. Yann DroneaudMar 27, 2013
  48. Junio C HamanoMar 22, 2013
  49. t7600: merge tag shoud create a merge commity@quest-ce.net, Mar 22, 2013
  50. t7600: merge tag shoud create a merge commity@quest-ce.net, Mar 22, 2013
  51. Junio C HamanoMar 22, 2013
  52. Yann DroneaudMar 22, 2013
  53. Jeff KingMar 22, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.