From: Marc Branchaud Date: Thu, 10 May 2018 18:34:44 GMT Subject: Re: Is rebase --force-rebase any different from rebase --no-ff? Message-ID: In-Reply-To: On 2018-05-09 03:46 PM, Ilya Kantor wrote: > I tried to compare --force-rebase VS --no-ff for the following repository: > http://jmp.sh/E7TRjcL > > There's no difference in the resulf of: > git rebase --force-rebase 54a4 > git rebase --no-ff 54a4 > > (rebases all 3 commits of feature) > > Also, there's no difference in interactive mode: > git rebase --force-rebase -i 54a4 > git rebase --no-ff -i 54a4 > > (picks all 3 commits of feature) > > Is there a case where --no-ff differs from --force-rebase? So now that "rebase -i" respects --force-rebase, the question is what to do about it: 1. Teach "rebase -i" to stop respecting --force-rebase (restoring the original intent when --no-ff was introduced)? 2. Deprecate --no-ff? 3. Deprecate --force-rebase? As a heavy rebase user, I find --no-ff more intuitive than --force-rebase. I'd be in favour of option 3, and keeping just --no-ff (with -f as a synonym). M. > --- > Best Regards, > Ilya Kantor > > > On Wed, May 9, 2018 at 10:27 PM, Marc Branchaud wrote: >> On 2018-05-09 02:21 PM, Stefan Beller wrote: >>> >>> +cc Marc and Johannes who know more about rebase. >>> >>> On Wed, May 9, 2018 at 9:01 AM, Ilya Kantor wrote: >>>> >>>> Right now in "git help rebase" for --no-ff: >>>> "Without --interactive, this is a synonym for --force-rebase." >>>> >>>> But *with* --interactive, is there any difference? >>> >>> >>> I found >>> >>> https://code.googlesource.com/git/+/b499549401cb2b1f6c30d09681380fd519938eb0 >>> from 2010-03-24 >> >> >> In the original discussion around this option [1], at one point I proposed >> teaching rebase--interactive to respect --force-rebase instead of adding a >> new option [2]. Ultimately --no-ff was chosen as the better user interface >> design [3], because an interactive rebase can't be "forced" to run. >> >> At the time, I think rebase--interactive only recognized --no-ff. That >> might have been muddled a bit in the migration to rebase--helper.c. >> >> Looking at it now, I don't have a strong opinion about keeping both options >> or deprecating one of them. >> >> M. >> >> [1] https://public-inbox.org/git/4B9FD9C1.9060200@xiplink.com/t/ >> [2] >> https://public-inbox.org/git/1269361187-31291-1-git-send-email-marcnarc@xiplink.com/ >> [3] https://public-inbox.org/git/7vzl1yd5j4.fsf@alter.siamese.dyndns.org/ >> >> >>> Teach rebase the --no-ff option. >>> >>> For git-rebase.sh, --no-ff is a synonym for --force-rebase. >>> >>> For git-rebase--interactive.sh, --no-ff cherry-picks all the commits >>> in >>> the rebased branch, instead of fast-forwarding over any unchanged >>> commits. >>> >>> --no-ff offers an alternative way to deal with reverted merges. >>> Instead of >>> "reverting the revert" you can use "rebase --no-ff" to recreate the >>> branch >>> with entirely new commits (they're new because at the very least the >>> committer time is different). This obviates the need to revert the >>> reversion, as you can re-merge the new topic branch directly. Added >>> an >>> addendum to revert-a-faulty-merge.txt describing the situation and >>> how to >>> use --no-ff to handle it. >>> >>> which sounds as if there is? >>> >>> Stefan >>> >>