Question: what is the difference between squash and rebase?
Answer: Git merge squash merges a tree (a sequence of commits) into a single commit. That is, it squashes all changes made in n commits into a single commit. On the other hand rebasing is re-basing, that is, choosing a new base (parent commit) for a tree.