Search code examples
githubgit-branchpull-requestgit-commitgit-rebase

How to delete/clear old commit history from pull request?


After a pull request and merge from my remote origin branch to upstream, I deleted the branch from my remote, but I rename the local branch and keep working on it (which I think is the reason why I messed up). When I commit this local branch to remote origin and did a pull request to the upstream, my commits of the first pull request also appeared.

  1. Are there ways to remove the old commit history from this pull request?

  2. Or I have to close this pull request and rebase the local branch to the upstream before doing another pull request?


Solution

  • If you have started working from an old branch (here a PR one), move your commits on top of the upstream target branch (for instance, the original repo main branch)

    cd /path/to/repo
    git remote add upstream https://github.com/<origina>/<repo>
    git fetch upstream
    

    You start from

       old PR
         |
    --x--x--Y--y--y (newBranch)
          \
           m--m--m (upstream/main, updated by the fetch)
    

    A quick rebase:

    git switch myNewBranch
    git rebase --onto upstream/main firstNewCommit^1 myNewBranch
    

    That gives:

       old PR
         |
    --x--x
          \
           m--m--m (upstream/main)
                  \
                   Y'--y'--y' (newBranch)
    

    A git push --force and your new PR is updated with a much shorter history.