投稿

[GitHub 100日チャレンジ] Day 61 - Git Resetの基本

git resetのsoft、mixed、hardの違いを整理し、ローカルのコミットを安全に戻す考え方を学びます。

[GitHub 100日チャレンジ] Day 61 - Git Resetの基本

git resetとは

git resetは、現在のブランチやHEADを指定したコミットへ動かす命令です。コミットを作り直したいとき、stageを外したいとき、ローカルの試行錯誤を戻したいときに使います。

ただし強い命令なので、どの領域を戻すのかを理解してから実行する必要があります。

3つのモード

オプション コミット Staging Area Working Directory
--soft 戻す 残す 残す
--mixed 戻す 外す 残す
--hard 戻す 外す 消す

--mixedはデフォルトです。

以下の三つのresetは、同じ状態から選ぶ比較用の例です。続けて実行すると、そのたびにHEAD~1の基準も一つ前へ動くので、三モードを同じ対象で比較したことになりません。最低二つのコミットがある使い捨ての練習用Repositoryで、戻す位置を確認して一つだけ選びましょう。

1
2
3
git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1

使い分け

  • コミットメッセージを直したい: --soft
  • stageしたファイルを選び直したい: --mixed
  • ローカルの変更を完全に捨てたい: --hard

--hardは未コミットの変更も消します。実行前に git status と git diff を確認しましょう。

共有済みコミットには注意

すでにpushしたコミットをresetで消してforce pushすると、他の人の履歴と衝突します。共有ブランチでは基本的に git revert を使います。

今日のゴール

resetは「履歴の位置」と「作業領域」を動かす命令です。soft、mixed、hardの違いを説明できるようにしましょう。

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。