A --> B --> C --> D A --> D git reset --soft HEAD^^^ git add -A git commit -C HEAD@{1} git reset --hard A # reset current branch to A git cherry-pick D # transplant commit D here git rebase --onto A C # transplant C..D onto A