LoginSignup
19
3

More than 1 year has passed since last update.

1 / 8

TL;DR

以下の3つが使える

git revert HEAD

git reset --hard HEAD^

git rebase -i
# 削除対象のコミットをpickからdに変更する

revertは取り消したいコミットを打ち消すコミットを作るのに対して
reset/rebaseはコミット自体を削除する。

reset/rebaseを実行する前には必ずテスト用のブランチで試してから本番ブランチで行いましょう。


ざっと復習とお約束

Gitとは Version Controll System の一つでソースコードのバージョニングに使用されるサービスである。

本記事では個人的な趣味から「歴史を作る」という表現をします。

また対象のコミットは今回は簡略化のために一つ前のコミットとします。(実際一つ前のコミットを打ち消したいケースが多いと思うのでこれを丸暗記するだけでも一部対応可能)


利用シーンの想定

例えば以下ケース

  • チームでGitを管理しているとブランチが複数存在し、本来入れたくないコミットを入れ込んでしまった
  • DBの情報、APIキーなどシークレットをソースコードに含めてコミットしてしまった
  • 恥ずかしいポエムをソースコードに入れっぱなしにしてコミットしてしまった

いざという時のために使い方をなんとなく把握しておきましょう


revert

gitには以下で定義されている

Revert some existing commits

一つ前のコミットを打ち消す場合は以下のコマンド

git revert HEAD

コミットメッセージを編集する画面に遷移するので保存して終了。

編集を取り消したいコミットを打ち消すコミットを作成するため、もともとHEADであったコミットはコミットは残ったままになることに注意

黒歴史もよい思い出という場合に使いましょう


reset

gitには以下で定義されている

Reset current HEAD to the specified state

一つ前のコミットを打ち消す場合は以下のコマンド

git reset --soft HEAD^

コマンドを実行すると一つ前のコミット内容がstageに現れ、打ち消したいコミットがlogから消える

黒歴史は完全に排除したいという場合に使いましょう


rebase

gitには以下で定義されている

Reapply commits on top of another base tip

(なるほど、わからん)

一つ前のコミットを打ち消す場合は以下の操作

git rebase -i

を実行すると

pick ${commit hash} ${commit message}
pick ${commit hash} ${commit message}
pick ${commit hash} ${commit message}
pick ${commit hash} ${commit message}
pick ${commit hash} ${commit message}

ここで削除したいコミットをエディタで行を pick から d に変更することでコミットの削除が可能


結局どれを使うか

個人的には以下のパターンを推奨

  • コミットを残して良い => revert
  • コミットを残したくない => reset

(rebaseはムズイからしっかりと練習してから使いましょう)

19
3
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
19
3