投稿

[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はデフォルトです。

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 の下でライセンスされています。