0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git resetでコミットを取り消す時のオプションをまとめてみた

Last updated at Posted at 2020-02-29

要約

HEADの位置を変えるコマンド。
色々コード修正してコミットしたらうまく動かなくなってしまったので使ってみました。
調べてみたらひとくちにresetといっても3種類のオプション(--soft, --mixed, --hard)があり、オプションによってWorking treeやIndexへの影響が変わるみたいです。

以下の状態からgit resetを使うとどうなるのか、説明してみます。
今Dまでコミットされており、HEADとIndexとWorking treeは全てDの状態です。

A <--- B <--- C <--- D
-------------------(HEAD)
-------------------(Index)
-------------------(Working tree)

git reset --soft

Working treeとIndexはそのままにHEADのみを指定のコミットに戻すコマンド。

構文
$ git reset --soft [コミットを指定]

例 (2世代前のコミットに戻す)
$ git reset --soft HEAD~2

実行後
コミット取り消されがHEADのみが2つ前のBに戻りました。

A <--- B <--- C <--- D
-----(HEAD)
-------------------(Index)
-------------------(Working tree)

具体的な使用シーン
コミットした内容を修正したいが、修正量は少ないケース

git reset --mixed

Working treeはそのままにIndexとHEADを指定のコミットに戻すコマンド。

構文
$ git reset --mixed [コミットを指定]

例 (2世代前のコミットに戻す)
$ git reset --mixed HEAD~2

実行後
コミット取り消されHEADとIndexが2つ前のBに戻りました。

A <--- B <--- C <--- D
-----(HEAD)
-----(Index)
-------------------(Working tree)

具体的な使用シーン
複数ファイルに渡る変更をコミットしたが、addする対象、内容を見直したいケース。

git reset --hard

Working tree、Index、HEADを指定のコミットに戻すコマンド。

構文
$ git reset --hard [コミットを指定]

例 (2世代前のコミットに戻る)
$ git reset --hard HEAD~2

実行後
コミット取り消されHEADとIndexとWorking treeが2つ前のBに戻りました。

A <--- B <--- C <--- D
-----(HEAD)
-----(Index)
-----(Working tree)

具体的な使用シーン
変更点が多い場合や、何故か動かなくなったので動いていた時の状態に戻したいケース。

参考にさせて頂いた記事

いまさらだけどGitを基本から分かりやすくまとめてみた
git resetでどのオプション(hard, mixed, soft)を指定すべきか、シチュエーション別に分けてみる

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?