【Git】状態を戻す際には ~ reset / revert etc ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/07/11/182959

の続き。

上記の関連記事で関係したGitの文法やGitコマンドについて、まとめる。

目次

【1】関連する基本文法
 1)HEAD
 2)^ (キャレット)
 3)~ (チルダ)
【2】関連するコマンド
 1)git log
 2)git reset
 3)git revert
 4)git checkout
 5)git push -f (--force)

【1】関連する基本文法

1)HEAD
2)^ (キャレット)
3)~ (チルダ)

※補足

「2)^ (キャレット)」と「3)~ (チルダ)」は
 以下のサイトを読みと、図付きでいいかも。

https://qiita.com/chihiro/items/d551c14cb9764454e0b9

1)HEAD

* 最新コミット状態を表している
* @でも同じ

2)^ (キャレット)

* HEAD^
 => 指定したコミットの一番目の親
* HEAD^[番号] (e.g. HEAD^4) 
 => 指定したコミットのN番目の親

3)~ (チルダ

* HEAD~
 => 指定したコミットの一世代前の親
* HEAD~[番号] (e.g. HEAD~4)
 => 指定したコミットのN世代前の親

【2】関連するコマンド

1)git log
2)git reset
3)git revert
4)git checkout
5)git push -f (--force)

1)git log

 * コミット履歴の閲覧

構文

git log ([オプション])

# 一行表示
git log --oneline

# 差分表示 - 変更箇所
git log -p

# 差分表示 - どのファイルに何か所変更があったか
git log --stat

参考文献
https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7

 2)git reset

 * 過去の状態に戻す
 => ファイルをインデックスから削除し、特定のコミットまで戻す

使用上の注意

* git reset --hard [ハッシュ値] を使った際に、
 間のものは全て捨てることになる

https://qiita.com/Yorinton/items/e0e969d961b17a359e19
構文

git reset ([オプション])

# git reset --hard <戻りたい地点の過去のコミット>
git reset --hard [ID/HEAD/HEAD^]

# 最新のコミットを捨てる
git reset --hard HEAD^

# git resetしたあとにそれを取り消す
git reset --hard ORIG_HEAD

3)git revert

* コミットを打ち消して、元に戻す
 => ログには残る
 => 特定のコミットを元に戻すのにも使える

cf. revert = 元に戻す

構文

# コミットを打ち消す
git revert [コミットID]

# i) git log で戻す対象のハッシュ値を調べる
git log

commit aa1ecxxxxxxxx ...

# ii) git revert [ハッシュ値] で戻したいコミットIDを指定して実行
git revert aa1ecxxxxxxxx

4)git checkout

 * 変更を戻す

構文

# 変更を戻す
git checkout -- [ファイル]

参考文献
https://qiita.com/muran001/items/dea2bbbaea1260098051

5)git push -f (--force)

* 強制的にリモートの履歴を上書きする

強制Pushの危険性

* 自分以外の開発メンバがPushできなくなる可能性がある

サンプル

# リモートの master を強制に コミットID aa1ecxxxxxxxx に戻す
git push -f origin aa1ecxxxxxxxx:develop

参考文献
https://next.rikunabi.com/journal/20180209_t12_iq/

関連記事

Git ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/06/29/104028
Git ~ 基本編 / 基本コマンド ~
https://dk521123.hatenablog.com/entry/2020/10/02/000000
【Git】状態を戻す方法を考える
https://dk521123.hatenablog.com/entry/2020/07/11/182959
Githubで状態を戻す方法を考える
https://dk521123.hatenablog.com/entry/2022/08/03/000000