On Dec 9, 2017, at 01:54, Igor Djordjevic wrote: > On 08/12/2017 17:24, Junio C Hamano wrote: >> I'd rather do a quick fix-up on top (which ensures that at least the >> fix-up works in the context of the tip), and then "rebase -i" to >> move it a more appropriate place in the history (during which I have >> a chance to ensure that the fix-up works in the context it is >> intended to apply to). > > Chris reported in this very topic[1] that sometimes, due to conflicts > with later commits, "checkout > commit > [checkout >] rebase --onto" > is "much easier to do", where "commit --fixup > rebase -i" "breaks" > (does not apply cleanly). It was more of a rant about conflict resolution by rebase rather than a concern about modification time of files. While I'd prefer git to not touch the source tree unnecessarily, it's not really a big deal for me if it does and some parts of the project need to be rebuilt. The situations which tend to cause conflicts for me usually look like this. ---A---B Say, a file has this line added somewhere in commit A: +int some_function(); Then commit B adds another line: int some_function(); +int another_function(); Then I realize that I would like to have commit A to introduce some other_function() as well, so I add a fixup: ---A---B---f!A with the following diff: int some_function(); +int other_function(); int another_function(); And then I often find that "rebase -i --autosquash" fails to apply the commit B because it expects slightly different context around the changed lines. However, sometimes I see that if I do this: ---A---B \ f!A then "rebase --onto f!A A B" succeeds, nicely resolving the conflict without bothering me. No idea why. I kinda hoped that you may know this magic and incorporate it into "commit --onto" which will allow to immediately get to the result of the rebase: ---A---f!A---B' without spelling it all manually. (And yeah, I'm actually Alexei, not Chris. That was my MUA being dumb and using an old pseudonym than Google insists I'm called by.)