内容
以下の内容について書いていきます。
- 直前のコミットのコミットメッセージを変更したい
- 直前のコミットの内容を変更したい
- ワーキングツリー/ステージングエリアに載せた変更を取り消したい
- 動作確認のためにいくつも前のコミットの状態に戻したい
前提
mainブランチで、v1→v2→v3とコミットを重ねてきているとします。
ワーキングツリー/ステージングエリアに載せた変更を取り消す
git restore <filename>
add前のファイルの変更を取り消す。git add
と同じ文法で使用可能。
git status
で表示される。
git restore --staged <filename>
ステージングエリア上の変更を取り消す。
git status
で表示される。
直前のコミットのコミットメッセージを変更する
git commit --amend
エディタが開き、修正後に閉じることで修正が完了する。
この際ステージングエリアにある変更を自動で直前のコミットに追加する。
特定のコミットの状態に戻す
git reset --hard <戻したいコミットのハッシュ>
※戻したいコミット以降の変更やワーキングツリー/ステージングエリアの情報が全て消えるので注意
git reset --mixed <戻したいコミットのハッシュ>
git reset <戻したいコミットハッシュ>
上記2つとも同じ。
コミットを取り消しつつ、手元のファイルの状態を残したままにできるので、直前のコミットの内容を修正したい場合に便利
直前のコミットの内容を修正する場合は以下でも可。^は「1つ前」を表す。
git reset --mixed HEAD^
git reset --soft <直前のコミットハッシュ>
--mixed オプションと同じく、手元のファイルの状態はそのまま残る。
--mixed オプションではステージングエリアの変更が空になるが、--soft オプションではステージングエリアに変更が残っている状態になる。場合によって使い分けの必要あり。
git resetのオプションの挙動まとめ
v1に戻したとする時のオプションによる挙動の違いは以下のようになります。
--hard | --mixed | --soft | |
---|---|---|---|
手元のファイルの状態(WT) | v1時点に戻る | v3時点のまま | v3時点のまま |
ステージングエリア | 空になる | 空になる | v3時点のまま |