LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

はじめに

以前、アプリ開発に取り組んでいるときに、直前にコミットした操作に誤りが見つかり、コミットを取り消したいということがあったのですが...
どうやってコミットの履歴を消すのか分かりませんでした。
ネットで調べていくと、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でコミットやプッシュのミスに気がついた時は、かなり焦ることが多いですよね。
そんな万が一の際に、慌てふためくことのないように、こういったイレギュラーな処理にも慣れていきたいと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0