I have branch foo off of master/head. I wanted to ammend the master/head and have these changes picked up on branch foo. I did the following:
git checkout master
git add ...
git commit --amend
git checkout foo
git rebase master
The problem was the old non-amended commit shows up as part of branch foo after the amend, and it got rebased onto master. I did a git rebase -i and deleted the old commit and that worked, but is there an easier/safer way to modify the commit that's the base of a branch? And yes, it's all local commits that haven't been pushed..
All you needed to do was to tell git where to start the rebase from: You can do this
Where SOMESHA is the old master SHA. That is if your tree now looks like this
And you do
Your tree will then look like this.
ASIDE: we can use different names for the
cccccc
commit if you dont like using SHA values.This means we can reference
cccccc
asmaster@{1}
(AKA, the previous location of master)So we could write this rebase as
Another description of the commit
cccccc
isfoo^
(AKA, the parernt commit for foo), so we could also write this asThey 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.