On Thu, Jun 13, 2019 at 3:42 PM Vincent Legoll <vincent.legoll@xxxxxxxxx> wrote: > > 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.