Re: Bug with fixup and autosquash
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Feb 9, 2017, 20:55 UTC
- Message-ID
- <alpine.DEB.2.20.1702092142020.3496@virtualbox>
- In-Reply-To
- <xmqqbmucuwb0.fsf@gitster.mtv.corp.google.com>
Hi Ashutosh and Junio,
On Wed, 8 Feb 2017, Junio C Hamano wrote:
Show 32 quoted lines
> Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> 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, 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".