Reputation: 2142
When I accidentally committed a file to the wrong branch, I normally use git reset --hard HEAD~1
. However, using this method I generally lose all the files committed. Is there a way to reset a commit, without losing the edited files?
Upvotes: 28
Views: 28215
Reputation: 66
for my case, i prefer using --mixed
instead, after i found this simple explanation
git reset --mixed HEAD^
Upvotes: 2
Reputation: 25621
do not use --hard
use --soft
instead.
Thus if you want to remove your latest commit you'd do:
git reset --soft HEAD^
Upvotes: 57
Reputation: 31441
While Alex is very correct, I might be tempted to try a different sequence:
If I wanted the commit on a yet-to-be-born branch:
git branch newbranch
git reset --hard HEAD^
If I wanted the commit on an existing branch:
git checkout otherbranch
git cherry-pick firstbranch
git checkout firstbranch
git reset --hard HEAD^
The full example of Alex's answer
git reset --soft HEAD^
git checkout otherbranch
git commit -am "Message"
Note the last example will fail poorly if the attempt to "float" the change to the other branch fails due to conflicts. You will then need to stash/checkout/apply to get into conflict resolution.
Upvotes: 5