LoginSignup
3

More than 1 year has passed since last update.

gitのコミットを取り消したい時に使う3つの方法

Last updated at Posted at 2021-01-14

間違ってコミットしてしまった、コミットしたらデグレしてしまった。。
こういう時にコミットを取り消すコマンドがあります。
3つほど紹介したいと思います。

gitのリポジトリ

Screen Shot 2021-01-14 at 23.35.18.png

working treeが手元のコード。一番新しいです。
git add ファイル名するとindexというコミット準備段階になります。
index上のファイルにgit commit -m "comment"するとメッセージとともにlocal repositoryに保存されます。最新のlocal repositoryのことをHEADと呼びます。
最後にgit pushすると、GitHubなどチームで管理するrepositoryに移ります。

reset

remoteにpushする前ならこの方法で楽に任意のコミット履歴まで巻き戻せます
pushしたあとresetするとリモートとの履歴に不整合が起き、git push -fする必要が出てきますので注意。
もし自分のpushの前に誰かがpushした状態で、フォースプッシュするとその人のコミットを消し飛ばすので極力避けましょう。

// 1つ前のコミットに戻りworking treeもリセット
git reset --hard HEAD^

// 4つ前のコミットに戻りworking treeもリセット
git reset --hard HEAD~4

// add を取り消す
git reset --mixed

// 4つ前のコミットに戻りworking treeはそのまま
// つまりコミットのHEAD任意の履歴まで戻り、コード自体は残ったままになる。
git reset --soft HEAD~4

// 誤ってgit resetをした際に元に戻す
git reset --hard ORIG_HEAD

revert

git rest --hardした際に他の人がpushした履歴(コミットログ)が消し飛ぶ危険性を避けるには、新たに打ち消し用コミットを作成する方法があります。
これなら履歴も消えないのでフォースコミットする必要はありません!

git revert <対象のコミットID>

rebase

無駄にコミットをしてしまい、醜くなってしまった時にまとめることができます。
あとで履歴を見たときに見やすく、レビューしてもらうときに余計な手間をかけさせないために使いましょう。

git rebase -i HEAD~3

// こんな画面がviで表示されます。
// pickで残す履歴、sでまとめてしまう履歴を選びます。
// この場合はe331898だけ残し、あとはまとめてしまいます。

pick e331898 wip
s c45e0bf test 6
s 042074b wip

# Rebase 8ac1025..042074b onto 8ac1025 (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]

JetBrainのEditorを使っている方

ちなみにIdeaやPhpStormなどJetBrainのEditorを使っている方はここからもrevert, resetできて便利ですよ!
Gitのタブを開く>Log>特定のコミットをクリック> revert commit
Screen Shot 2021-01-14 at 23.25.47.png

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
What you can do with signing up
3