コミットのバージョンを戻したりステージングしたものを編集内容ごと取り消したりと 色々戻す方法があるが、戻す時によく忘れるのでメモ。
addする前の編集内容を取り消す
git checkout ファイル名
またはgit checkout .
git checkout .
は変更内容を全部ないことにしてくれるが、新規追加したファイルに
関しては削除されない点に注意!
1 2 3 |
|
完全に元に戻したい場合は別途削除する必要がある
1
|
|
ステージングを取り消す
ステージングを取り下げる。編集内容は残る
ファイル名を指定しないと全てのステージングが取り下げられる。
1
|
|
ステージしたファイルを最後にコミットした状態に戻す(編集内容は残らない)
1
|
|
編集・ステージングいずれの変更内容を取り消し、最後にコミットした状態に戻す
1
|
|
checkout
とreset
の違いを説明をざっくりとだけ説明すると、
大きく分けて違いは二つ
作業ディレクトリの未保存の有無をチェック
checkout
:ある。うまくやれば未変更のファイルを全て更新してくれる
reset --hard
:ない。容赦無く上書きされるHEADの移動の仕方
checkout
:HEADそのものが移動。HEADが付いていたブランチに変化はない
reset
:HEADの示すブランチの方が移動
コミットのバージョンを戻す
コミットidをgit log
コマンドで調べて戻したいコミットidを指定する
1
|
|
reset --hard
が戻った以降のコミットをなかったコトにする(コミットログが消える)のに
対しrevert
はコミットログを残したまま戻る
そのままpush
したりmerge
されたりすると、反映されていない変更履歴が残ってしまい、
戻したくなった時にそれを知らないと混乱させる元になる。
チーム開発では要注意!
1
|
|
リモートのバージョンを一つ前に戻す
結論から言うとそれ用のコマンドは用意されていない!
念の為バックアップを作成
1
|
|
remote
のmaster
を一旦消す。ローカルを一つ戻す
push
して反映させる
1
|
|
バックアップを消す