When upstream is not specified for the rebase command (e.g. I just do
`git rebase`), `--fork-point` is assumed which results in commits
regenerating SHA1 even if the merge-base would otherwise be identical.
Here's my scenario:
I set my remote tracking branch to my parent branch:
$ git branch -u origin
I do a status to see that I'm 1 ahead:
$ git status -sb
## feature/foo...origin/master [ahead 1]
I then execute `git rebase`:
$ git rebase
First, rewinding head to replay your work on top of it...
Applying: Fix state machine hang after integrity checking
Since my merge-base is already the tip of `origin/master`, I expected
it to say it was up-to-date, as it would if I disabled fork point:
$ git rebase --no-fork-point
Current branch feature/foo is up to date.
The expected behavior is that if merge-base does not change, even with
--fork-point enabled, that SHA1's do not get rewritten.
As a workaround, I've created an alias that always assumes --no-fork-point:
[alias]
rb = rebase --no-fork-point
Possible long term solutions I'd be happy with:
1. A config option to disable fork point completely, something like
`rebase.forkPoint` and I can set it to `false`.
2. Change rebase to always assume `--no-fork-point` as a default,
which is opposite of the current behavior.
3. Assuming the behavior I'm observing is a bug, put more priority on
a matching merge-base instead of the reflogs, not sure of the
internals of how this fork-point behavior is implemented, but this
feels like the issue to me. The most ideal outcome is that this is a
bug and no interface or config changes are needed.
Would love to get feedback from the Git community on this. Thanks for reading!!