Help us understand the problem. What is going on with this article?

[GitHub]revertコマンドとresetコマンドの違いについて![初心者]

はじめに

以前、アプリ開発に取り組んでいるときに、直前にコミットした操作に誤りが見つかり、コミットを取り消したいということがあったのですが...
どうやってコミットの履歴を消すのか分かりませんでした。
ネットで調べていくと、GitHubのコマンドには、revertコマンドresetコマンドというものがあることを発見。
しかしよくよく説明を読むにつれて、これらのコマンドを使用する際は、落とし穴にはまる危険性が高い、と思いました。

備忘録も兼ねてアウトプットします!!

revertコマンドについて

反対の内容で新規コミットを作成し、過去のコミットを打ち消すためのコマンドです。
新しくコミットを追加しているだけであり、既存コミットの履歴がGitHub上から消えることはありません。
よって、後述するresetコマンドと比較すると、安全なコマンドと言えるでしょう。

使用方法

通常は以下のコマンドを打ち込むと、自動コミットという流れになります。
コマンド入力後に自動でエディタが開くので、コミットメッセージを併せて入力する形です。

$ git revert <commit> -e

または

$ git revert <commit> --edit

逆に、新規コミットしない方法もあります。

$ git revert <commit> -n

または

$ git revert <commit> --no-edit

コミットメッセージなしでrevertできます。

resetコマンドについて

revertコマンドと違い、現在のHEADを指定された状態にリセットするコマンドです。
指定したコミット以降に行われた処理を全て元の状態に戻します。
しかし、その戻したということ自体、コミットログには一切記録が残りません。
よって、チーム開発などで使用することは、極めてリスキーなコマンドです。

使用方法

直前のコミットを元の状態に戻すとき

$ git reset --hard HEAD^

n個前のコミットまで戻すとき

$ git reset ---hard HEAD~n

resetコマンドのオプション

上記で使用している--hardを含め、いくつかのオプションが存在します。

オプション名 インデックス ワーキングツリー
--mixed(デフォルト) リセット リセットされない
--soft リセットされない リセットされない
--hard リセット リセット

おわりに

GitHubでコミットやプッシュのミスに気がついた時は、かなり焦ることが多いですよね。
そんな万が一の際に、慌てふためくことのないように、こういったイレギュラーな処理にも慣れていきたいと思いました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away