rebase reapplies commits on top of another base branch merge joins two or more development histories together