853

私の問題は、ファイルを変更したことです。たとえば、README に新しい行 ' this for my testing line ' を追加し、ファイルを保存してから、次のコマンドを発行しました。

git status

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")


git add README

git commit -a -m 'To add new line to readme'

コードを GitHub にプッシュしませんでした。ここで、このコミットをキャンセルしたいと思います。

このために、私は使用しました

git reset --hard HEAD~1

しかし、新しく追加された ' this for my testing line ' という行が README ファイルから失われました。これは起こらないはずです。そこにコンテンツが必要です。コンテンツを保持し、ローカル コミットをキャンセルする方法はありますか?

4

6 に答える 6

1603

フラグgit resetなしで使用するだけです:--hard

git reset HEAD~1

PS: Unix ベースのシステムでは、 HEAD^which is equal to を使用できますHEAD~1。行継続を通知するため、 Windows では機能しHEAD^ません。^したがって、コマンドプロンプトは単に尋ねますMore?.

于 2011-01-31T12:17:08.753 に答える
241

フラグ--softの代わりに使用:--hard

git reset --soft HEAD^

最後のローカル(プッシュされていない)コミットは削除されますが、行った変更は保持されます。

于 2012-08-10T08:02:56.807 に答える
11

パラメーターの 1 つを使用して、git reset を実行するときに、インデックス (次のコミットになるファイルのセット) と作業ディレクトリをどうするかを Git に指示できます。

--soft: コミットのみがリセットされ、インデックスと作業ディレクトリは変更されません。

--mixed: これにより、インデックスが HEAD に一致するようにリセットされますが、作業ディレクトリは変更されません。すべての変更は作業ディレクトリに残り、変更されたように表示されます。

--hard: HEAD と一致するようにすべて (コミット、インデックス、作業ディレクトリ) をリセットします。

あなたの場合、git reset --soft変更した変更をインデックスと作業ディレクトリに保持するために使用します。詳しい説明はこちらをご確認ください。

于 2018-05-29T10:22:42.300 に答える