How to git commit --amend a commit that's the base of a branch How to git commit --amend a commit that's the base of a branch git git

How to git commit --amend a commit that's the base of a branch


All you needed to do was to tell git where to start the rebase from: You can do this

git rebase --onto master SOMESHA foo

Where SOMESHA is the old master SHA. That is if your tree now looks like this

* aaaaaa - (master)| * bbbbbb - (foo)| * cccccc - (old master)|/  * ffffff

And you do

git rebase --onto master cccccc foo

Your tree will then look like this.

* dddddd - (foo)|* aaaaaa - (master)|* ffffff

ASIDE: we can use different names for the cccccc commit if you dont like using SHA values.

> git reflog masteraaaaaa master@{0}: reset: moving to somethingcccccc master@{1}: commit: change the froozleffffff master@{2}: commit: snarf the froozle 

This means we can reference cccccc as master@{1} (AKA, the previous location of master)

So we could write this rebase as

git rebase --onto master master@{1} foo

Another description of the commit cccccc is foo^ (AKA, the parernt commit for foo), so we could also write this as

git rebase --onto master foo^ foo

They all do exactly the same thing, and you may prefer to use different ones in different situations. I usually find the SHA simple to use, as I will often pull up a graph of my repository before performing this kind of operation.