I made a mistake, and started making commits "to the last tag", which lands my commits in "no branch". They should have been applied at the head of an already existing branch. I have not pushed my changes yet. I've found a few other question for when commits are in the wrong branch, but now I have no branch, so I don't know how to handle this.
Preferably, I would like to erase my mistake entirely, and "move" my changes to the end of the right branch. If I must leave my mistake in the history, I need to merge them in atleast.
Note: you have also
In both case, doing a
tmp
branch and merging it back to the actual branch is the solution.Another solution, which does not involve creating a temp branch, is described here. You just merge with you last commit rather than a temp branch.
If you don't know what commit you are on you can find it with
git log
. I don't know if this solution is different than "cherry-picking" but it had the expected results for me.I just had a situation where I had a
master
branch I wanted to commit to, but accidentally committed to a detachedHEAD
(note, the commit hash is not important here, but just to illustrate the situation):Here was my quick fix:
Piece of cake.
Note that this trick only works if
master
originally pointed to the same commit you made your mistaken commit on top of. If that's not the case, you'll have to rebase (or cherry-pick, or merge...).You can view all your commits using
git reflog
So you can simply got to another branch, and do
git cherry-pick <commit-hash>
for the required commits.But I'd prefer the branch way as
spatz
mentioned.You are currently in a detached HEAD state. To resolve that, all you need to do is create a new branch with
git branch <branchname>
orgit checkout -b <branchname>
. That will leave you with a local branch you can play with, and even delete when you're done with it.Branches in git are just pointers to commits, so if you create a new branch where you are the new branch will point to your current commit, and then you can merge it or whatnot.
Your "mistake" need not be erased, you simply created new commits on top of previous ones. You did not modify history or anything like that.
EDIT: In response to your comment, what you need to do is: