From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH 0/2] Feeding an annotated but unsigned tag to "git merge"
Date: Tue, 5 Jun 2012 12:58:30 -0700 [thread overview]
Message-ID: <1338926312-4239-1-git-send-email-gitster@pobox.com> (raw)
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
next reply other threads:[~2012-06-05 19:58 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-05 19:58 Junio C Hamano [this message]
2012-06-05 19:58 ` [PATCH 1/2] merge: separte the logic to check for a signed tag Junio C Hamano
2012-06-05 19:58 ` [PATCH 2/2] merge: allow fast-forwarding to an annotated but unsigned tag Junio C Hamano
2012-06-06 13:42 ` [PATCH 0/2] Feeding an annotated but unsigned tag to "git merge" Jeff King
2012-06-06 16:37 ` Junio C Hamano
2012-06-07 9:09 ` Jeff King
2012-06-07 16:17 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1338926312-4239-1-git-send-email-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).