0
0

Gitでの取り消し

Posted at

内容

以下の内容について書いていきます。

  • 直前のコミットのコミットメッセージを変更したい
  • 直前のコミットの内容を変更したい
  • ワーキングツリー/ステージングエリアに載せた変更を取り消したい
  • 動作確認のためにいくつも前のコミットの状態に戻したい

前提

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時点のまま
0
0
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
0