cherrun
cherrun

Reputation: 2142

Reset without losing already committed files

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

Answers (3)

el hafizh hidayat
el hafizh hidayat

Reputation: 66

for my case, i prefer using --mixed instead, after i found this simple explanation

git reset --mixed HEAD^

Upvotes: 2

Alexander Oh
Alexander Oh

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

Seth Robertson
Seth Robertson

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

Related Questions