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).