2012-07-14 11 views
14

間違ってブランチにファイルをコミットしたとき、私は通常git reset --hard HEAD~1を使用します。しかし、この方法を使用すると、一般にコミットされたすべてのファイルが失われます。編集したファイルを失うことなく、コミットをリセットする方法はありますか?コミットされていないファイルを失うことなくリセット

答えて

25

--hardを使用しないでください。代わりに--softを使用してください。

あなたは、最新のを削除したい場合はこのようにあなたがしたいコミット:

git reset --soft HEAD^

+0

@cherrunまた、[Reset Demystified](http://git-scm.com/2011/07/11/reset.html)を読むことを検討してください。 – kostix

+0

+1短く正確な答えです。要約すると、 'git reset --soft HEAD〜1' – VarunPandey

5

アレックスは非常に正しいですが、私は別のシーケンスをしようとする誘惑されることがあります。

私が望んでいた場合

:私は既存のブランチにコミットしたい場合

git branch newbranch 
git reset --hard HEAD^ 

:まだツー生まれするブランチにコミット

git checkout otherbranch 
git cherry-pick firstbranch 
git checkout firstbranch 
git reset --hard HEAD^ 

アレックスの答え

git reset --soft HEAD^ 
git checkout otherbranch 
git commit -am "Message" 

ノートの完全な例「フロート」にしようと、他のブランチへの変更が競合に起因する障害が発生した場合、最後の例では不十分失敗します。競合解消のためには、stash/checkout/applyが必要です。

+1

すばらしい答え!私はこれが最後のコミットで行われた変更を投げ捨て、残りの半分は残していることだと思います。その場合は、コミットを破棄し、変更を追加し直してください。この場合、 'git add --interactive'も便利です! – Alex

関連する問題