threads / discuss / 51309

cherry-pick strangeness

Subject: cherry-pick strangeness

## tl;dr

4 messages between Jun 13, 2019 and Jun 15, 2019.

replies: 3people: 3as markdown or json

Vincent Legoll· Jun 13, 2019, 22:40 UTC · lore
Hello,

I stumbled upon a strange behavior of cherry-pick, running the attached script yields different results from running the same command lines manually in an interactive shell, one after the other.

I searched the man page and found no indications that that should act in this way. It looks like the CLI args "--ff" & "--no-ff" or the absence of it are not doing the same in a script as in an interactive shell.

I asked in the IRC channel, and was asked to report it here.

I tried to reproduce it in various environments, I ran it in Centos 7, debian 9, ubuntu bionic & cosmic, alpine & fedora, in docker containers, all giving the same results. The git versions tested range from 1.8.3.1 to 2.21.0.

Trying to reproduce, I created the attached script, which reports 3 times "SAME", whereas the case using "--no-ff" should print "DIFF", if I'm not wrong in reading its manpage description.

What am I missing ?
-- 
Vincent Legoll
Elijah Newren· Jun 13, 2019, 22:56 UTC · re: Vincent Legoll · lore

Re: cherry-pick strangeness

On Thu, Jun 13, 2019 at 3:42 PM Vincent Legoll <vincent.legoll@gmail.com> wrote:
Show 28 quoted lines
>
> Hello,
>
> I stumbled upon a strange behavior of cherry-pick,
> running the attached script yields different results
> from running the same command lines manually in
> an interactive shell, one after the other.
>
> I searched the man page and found no indications
> that that should act in this way. It looks like the CLI
> args "--ff" & "--no-ff" or the absence of it are not
> doing the same in a script as in an interactive shell.
>
> I  asked in the IRC channel, and was asked to report
> it here.
>
> I tried to reproduce it in various environments, I
> ran it in Centos 7, debian 9, ubuntu bionic & cosmic,
> alpine & fedora, in docker containers, all giving the
> same results. The git versions tested range from
> 1.8.3.1 to 2.21.0.
>
> Trying to reproduce, I created the attached script,
> which reports 3 times "SAME", whereas the case
> using "--no-ff" should print "DIFF", if I'm not wrong
> in reading its manpage description.
>
> What am I missing ?

When you cherry-pick a commit, it reapplies its diff on top of a (usually different) commit, preserving the author name/email/date, but throwing away the committer name/email/date -- instead using your name/email and the time of the cherry-pick for the committer. Since you are transplanting on the same commit, and you created both the original commit and the cherry-pick, the only thing that can be different is the committer timestamp. Git records timestamps down to 1-second resolution. If you run in a script, odds are that the original commit and the cherry-pick both run within the same second (though not always), and thus you end up with precisely the same commit. When you run interactively, you take longer than a second between commands, and thus have a different committer date which naturally will have a different sha1sum.

Vincent Legoll· Jun 14, 2019, 07:26 UTC · re: Elijah Newren · lore

Re: cherry-pick strangeness

Hello,
On Fri, Jun 14, 2019 at 12:56 AM Elijah Newren <newren@gmail.com> wrote:
Show 18 quoted lines
>
> On Thu, Jun 13, 2019 at 3:42 PM Vincent Legoll <vincent.legoll@gmail.com> wrote:
> >
> > What am I missing ?
>
> When you cherry-pick a commit, it reapplies its diff on top of a
> (usually different) commit, preserving the author name/email/date, but
> throwing away the committer name/email/date -- instead using your
> name/email and the time of the cherry-pick for the committer.  Since
> you are transplanting on the same commit, and you created both the
> original commit and the cherry-pick, the only thing that can be
> different is the committer timestamp.  Git records timestamps down to
> 1-second resolution.  If you run in a script, odds are that the
> original commit and the cherry-pick both run within the same second
> (though not always), and thus you end up with precisely the same
> commit.  When you run interactively, you take longer than a second
> between commands, and thus have a different committer date which
> naturally will have a different sha1sum.
Thanks for the thorough explanation.
Looks like this has nothing to do with "--[no-]ff" at all.

So if I put a "sleep 2" before each cherry-pick I won't get to see that behavior, or if I had used something that changes the commit message ("-x", "-s" or maybe even "-S") ?

Shouldn't something about that be added to the man page to avoid people scratch their heads ? (I can try to cook something if this is deemed acceptable)

-- 
Vincent Legoll
Phil Hord· Jun 15, 2019, 00:24 UTC · re: Vincent Legoll · lore

Re: cherry-pick strangeness

On Fri, Jun 14, 2019 at 12:29 AM Vincent Legoll <vincent.legoll@gmail.com> wrote:

Show 22 quoted lines
> On Fri, Jun 14, 2019 at 12:56 AM Elijah Newren <newren@gmail.com> wrote:
> > When you cherry-pick a commit, it reapplies its diff on top of a
> > (usually different) commit, preserving the author name/email/date, but
> > throwing away the committer name/email/date -- instead using your
> > name/email and the time of the cherry-pick for the committer.  Since
> > you are transplanting on the same commit, and you created both the
> > original commit and the cherry-pick, the only thing that can be
> > different is the committer timestamp.  Git records timestamps down to
> > 1-second resolution.  If you run in a script, odds are that the
> > original commit and the cherry-pick both run within the same second
> > (though not always), and thus you end up with precisely the same
> > commit.  When you run interactively, you take longer than a second
> > between commands, and thus have a different committer date which
> > naturally will have a different sha1sum.
>
> Thanks for the thorough explanation.
>
> Looks like this has nothing to do with "--[no-]ff" at all.
>
> Shouldn't something about that be added to the man page to avoid
> people scratch their heads ? (I can try to cook something if this is
> deemed acceptable)

Patches to documentation are welcome, but I'm not sure what you'd say. Is it just a note to point out that the HEAD resulting from cherry-pick is not guaranteed to be unique? That seems too noisy for something which is inconsequential to most users, to me. But others may disagree.

← back to recent threads