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?
To jump back to a previous commit, first find the commit's hash using git log . This places you at commit 789abcd . You can now make new commits on top of this old commit without affecting the branch your head is on. Any changes can be made into a proper branch using either branch or checkout -b .
To remove the last commit from git, you can simply run git reset --hard HEAD^ If you are removing multiple commits from the top, you can run git reset --hard HEAD~2 to remove the last two commits. You can increase the number to remove even more commits.
git reset --soft , which will keep your files, and stage all changes back automatically.
do not use --hard
use --soft
instead.
Thus if you want to remove your latest commit you'd do:
git reset --soft HEAD^
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With