Gitで最新のローカルコミットを元に戻すには?
誤って間違ったファイルをGitにコミットしてしまいましたが、そのコミットをまだサーバーにプッシュしていませんでした。
どうすればローカルリポジトリからそれらのコミットを取り消すことができますか?
20249
3
誤って間違ったファイルをGitにコミットしてしまいましたが、そのコミットをまだサーバーにプッシュしていませんでした。
どうすればローカルリポジトリからそれらのコミットを取り消すことができますか?
コミットの取り消しとやり直し
1.元に戻したい内容です。 2.2. これは作業ツリー (ディスク上のファイルの状態) には何もしませんが、コミットを取り消し、コミットした変更をステージングしないままにします (そのため、
git status
に "Changes not staged for commit" として表示されるので、コミットする前に再度追加する必要があります)。もし、前のコミットにさらに変更を加えたり、コミットメッセージ1を変更したりしたいだけなら、代わりにgit reset --soft HEAD~
を使うことができます。 3.3. 作業ツリーのファイルを修正します。 4.新しいコミットに含めたいものをgit add
してください。 5.5. 変更をコミットし、古いコミットメッセージを再利用します。reset
は古いヘッドを.git/ORIG_HEAD
にコピーしました。-c ORIG_HEAD
を指定してcommit
を実行するとエディタが開き、最初は古いコミットのログメッセージが含まれていて、それを編集することができます。メッセージを編集する必要がなければ、-C
オプションを使うこともできます。ただし、インデックスに新しい変更を加えていた場合、
commit --amend
を使用すると、以前のコミットに追加されてしまうことに注意してください。コードがすでにサーバーにプッシュされていて、履歴を上書きする権限(リベース)を持っている場合は、次のようにします。
こちらの回答も参考にしてみてください。
https://stackoverflow.com/questions/34519665/how-to-move-head-back-to-a-previous-location-detached-head/34519716#34519716
上記の回答では、元に戻したいSHA-1を見つけるために使用する
git reflog
が示されています。元に戻したい箇所が見つかったら、上記で説明した一連のコマンドを使用します。1 しかし、もしあなたが commit message を間違えただけなら、以前のコミットに戻す必要はないことに注意してください。より簡単な方法は、
git reset
(それ以降に行った変更を元に戻す) してからgit commit --amend
を実行することです。これにより、最後のコミットメッセージがあらかじめ入力されたデフォルトのコミットメッセージエディタが開きます。2
HEAD~
は、HEAD~1
と同じです。ファイルを追加・削除することで、思い通りの状態にすることができます。
その後、コミットを修正します。
以前の誤ったコミットは、新しいインデックスの状態を反映して編集されます。言い換えれば、最初から間違いを犯していなかったかのようになります。
この作業は、まだプッシュしていない場合にのみ行うようにしましょう。もしプッシュしているのであれば、普通に修正をコミットする必要があります。
または
**警告です。上記のコマンドを実行すると、コミットしたかった
.java
ファイル(およびその他のファイル)の修正が永久に削除されます。HEAD-1
への
hard reset` は、作業コピーを間違ったコミットの前のコミットの状態にします。