Git rebase doesn’t rewrite history, it maintains it. From a straight date-based timrline it becomes nonlinear as the sequence of commits remains logical (your feature commits are on top of the current base branch head) but the dates don’t necessarily follow.

IMHO the merge (downstream) doesn’t preserve history as it introduces a new commit for the sole purpose of reconciling changes whereas the intuitive meaning of a commit is “code that I added” which is represented by the commits you actually made (which you can also choose to squash).

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store