On Sun, Jun 30, 2019 at 12:54 AM Jeff King <peff@xxxxxxxx> wrote: > > > and then do: > > git merge --squash feature > > I get the same merge that rebuash is doing (with R6 as the merge base, > so we see F5 and R7 conflicting with each other). And then when I finish > it with "git commit", the result is a linear strand with M3 at the tip > (and its commit message is even auto-populated with information from the > squashed commits). > > -Peff >From the point of view of the revisions that you produce in the end, it's the same thing, but you are not rebasing/squashing your feature branch, you are moving your upstream branch to where you want the squashed/rebased branch to be. So, in fact you would need more steps, something like (starting from your feature branch being checked out): git checkout --detach $( git rev-parse --abbrev-ref --symbolic-full-name @{u} ) git merge --squash my-feature-branch git branch -f my-feature-branch git checkout my-feature-branch Yes, it works. Only that with rebuash you would do (starting from the feature branch being checked out branch): git rebuash as long as the upstream branch is set, of course. I think it makes more sense in terms of development flow of feature branches, if you know in the end you will give up a squashed branch: modify commit modify commit git pull # no need to use pull --rebase, merges will be fine modify commit modify commit git pull git modify # now I'm ready to rebase/squash git fetch git rebuash adding history could be done with an additional option (--hist (default) and --no-hist?) But, as you said, it's not like it's not possible to do it (with a little more effort) with available tools like merge --squash