From: "Johannes Schindelin" <Johannes.Schindelin@xxxxxx>
Sent: Thursday, February 09, 2017 8:55 PM
Hi Ashutosh and Junio,
On Wed, 8 Feb 2017, Junio C Hamano wrote:
Ashutosh Bapat <ashutosh.bapat@xxxxxxxxxxxxxxxx> writes:
> I have been using git rebase heavily these days and seem to have found
> a bug.
>
> If there are two commit messages which have same prefix e.g.
> yyyyyy This is prefix
> xxxxxx This is prefix and message
>
> xxxxxx comitted before yyyyyy
>
> Now I commit a fixup to yyyyyy using git commit --fixup yyyyyy
> zzzzzz fixup! This is prefix
>
> When I run git rebase -i --autosquash, the script it shows me looks
> like
> pick xxxxxx This is prefix and message
> fixup zzzzzz fixup! This is prefix
> pick yyyyyy This is prefix
>
> I think the correct order is
> pick xxxxxx This is prefix and message
> pick yyyyyy This is prefix
> fixup zzzzzz fixup! This is prefix
>
> Is that right?
[...]
Unfortunately, "rebase -i --autosquash" reorders the entries by
identifying the commit by its title, and it goes with prefix match so
that fix-up commits created without using --fixup option but manually
records the title's prefix substring can also work.
This prefix match also happens to introduce a serious performance problem,
which is why I "fixed" this issue in the rebase--helper already (which is
the case if you are using Git for Windows, whose master branch builds on
Linux and MacOSX as well). I quoted "fix" because my motivation was to fix
the performance problem, not the "incorrect match" problem.
The rebase--helper code (specifically, the patch moving autosquash logic
into it: https://github.com/dscho/git/commit/7d0831637f) tries to match
exact onelines first,
While I think this is an improvement, and will strongly support the `git
commit --fixup=<commit>` option which will, if the sha1/oid is given, create
the exact commit subject line.
However it would also be useful if the actual commit subject line could have
a similar format option, so that those who use say the git gui (rather than
the cli) for the commit message, could easily create the `!fixup <commit>`
message which would allow a broader range of ways of spelling the commit
(e.g. giving a sha1(min length) that is within the rebase todo list).
and falls back to prefix matching only after that.
Now that the sequencer-i patch series is in `master`, the next step is to
send the patch series introducing the rebase--helper. The patch series
including the fix discussed above relies on that one. Meaning that it will
take a while to get through the mill.
So please do not hold your breath until this feature/fix hits an official
Git version. If you need it[*1*] faster, feel free to build Git for
Windows' master and run with that for a while.
Ciao,
Johannes
Footnote: By "it" I mean "the feature/fix", not "an official Git version"
nor "your breath".
--
Philip