ACM@UIUC TIL logo ACM@UIUC TIL

When working on a branch with multiple commits, you can “go back in time” and revise previous commits any way you please.

$ git rebase -i origin/master

This command will prompt you inside of your $VISUAL with a series of commit SHAs and commit titles

# ...
pick ed1ff41 Move templates
pick 274ac0e Move components & views
# ...

To split up 274ac0e, replace pick with edit and save the buffer.

# ...
pick ed1ff41 Move templates
edit 274ac0e Move components & views
# ...

You are now detached from the HEAD of your branch and “back in time”. To split up the current commit (274ac0e):

$ git reset HEAD~

This will unstage all files within the commit. Next, split up the commit any way you’d like.

$ git add app/views
$ git commit -m "Move views"
$ git add app/components
$ git commit -m "Move components"

When you’re finished, continue the rebase.

$ git rebase --continue

If you introduced merge conflicts down the line, you’ll have to resolve them. If all went well, your branch’s history will be re-written.

$ git log origin/master..

# ...
ed1ff41 Move templates
7b84a01 Move views
274ac0e Move components
# ...

Keep in mind that you might have to force push your branch to origin, depending on whether or not your revised commits have been pushed.

$ git push origin my-branch-name --force