Merge создает merge-коммит, сохраняя историю веток. Rebase переносит коммиты своей ветки на конец целевой, линейная история. Rebase переписывает историю - не делать на общих ветках. В Go-проектах часто rebase перед merge в main (git pull --rebase), чтобы история была чище. При конфликтах разрешать при rebase по одному коммиту.
git checkout feature
git rebase main
# разрешить конфликты, git add, git rebase --continue
git checkout main
git merge feature