1. ホーム
  2. git

[解決済み] Git で直近のローカルコミットを取り消すには?

2022-03-17 15:30:27

質問

うっかり 間違ったファイルをコミットしてしまった から Git が、まだサーバーにコミットをプッシュしていませんでした。

どうすれば ローカルリポジトリからこれらのコミットを取り消す ?

唯一の方法は、何らかのGUIテキストエディタで編集をコピーし、ローカルクローン全体を消去し、リポジトリを再クローンし、編集を再適用することだと思われます。しかし

  • この場合、データ消失の可能性があります。
  • のみではとても無理です。 git commit が実行されました。

もっと良い方法はないのでしょうか?

どのように解決するのですか?

コミットの取り消し&やり直し

$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~                              # (1)
[ edit files as necessary ]                    # (2)
$ git add .                                    # (3)
$ git commit -c ORIG_HEAD                      # (4)

  1. このコマンドは アンドゥ . 最後のコミットを取り消しながら 作業ツリー(ディスク上のファイルの状態)はそのままにしておきます。 再度コミットする前に、再度追加する必要があります)。

  2. ワーキングツリーファイルの修正を行う。

  3. git add 新しいコミットに含めたいもの。

  4. 変更をコミットし、古いコミットメッセージを再利用します。 reset は古いヘッドをコピーして .git/ORIG_HEAD ; commit-c ORIG_HEAD を実行すると、古いコミットのログメッセージを含むエディターが開き、それを編集することができます。メッセージを編集する必要がない場合は -C オプションを使用します。

また、直前のコミット(あるいはそのコミットメッセージ)を編集することもできます。 , commit --amend は、現在のインデックス内の変更を直前のコミットに追加します。

サーバーにプッシュされたコミットを削除する(元に戻すのではない)には を使用すると、履歴を書き換えることができます。 git push origin master --force が必要です。


その他の情報

HEADを前の場所に戻すにはどうしたらいいですか?(detached head) & コミットを元に戻す

上記の回答では git reflog を使用すると、元に戻したいコミットの SHA-1 を特定することができます。この値がわかったら、上で説明したような一連のコマンドを使用します。


HEAD~ と同じです。 HEAD~1 . 記事 gitのHEADとは何ですか? は、複数のコミットをアンコミットしたい場合に便利です。