●Gitを使っていて起きる様々な『取り消したい!!』
Gitを使っていると、時々、「今のコミット取り消したい!」みたいなことが起きたので、メモがてらまとめておきます。
今後他の方法なども書き加えて行けたらとも思っています!
①ファイルへの変更をターミナルから取り消す(※git add前)
※ファイルに色々変更を加えたけど、まっさらな状態に戻したい!という時に使う
~$ git checkout -- <ファイル名>
~$ git checkout -- <ディレクトリ名>
#全ての変更の取り消し
~$ git checkout -- .
②ステージに追加した変更を元に戻したいとき(※git add後/git commit前)
うっかりgit addしたけど戻したい時
~$ git reset HEAD <ファイル名>
~$ git reset HEAD <ディレクトリ名>
#全ての変更を取り消す(指定した変更をステージから取り消すだけなので、ワークツリーのファイルには影響はない)
~$ git reset HEAD .
【裏側で起きている動作の説明】
ワークツリーからgit addでステージに加えられた変更を、
ローカルリポジトリに現在ある最新の(直前の)コミットから情報を持ってきて上書きしている。
つまり、HEADというのがその上書きするために用いられる、リポジトリの最新のコミットの内容を示していて、
それを使ってreset(上書き)するよ!ということ
※git addによる変更を取り消しただけなので、ファイルには書き直したい?内容は残ったままになる。
③直前のコミットをやり直す(git commit後/git push前)
※リモートリポジトリにpushしたコミットはやり直してはだめ!!!
複数人で開発をしていた場合、他の人のリポジトリの状態とリモートリポジトリの内容が異なり取り込めないと言ったことが発生するため
~$git commit --amend
今のステージの状態を元に直前のコミットをやり直す(git addでやり直したい内容をステージに追加 → git commit --amendで直前のものを修正)
おまけ
今回の取り消し作業とは関係ないのですが、Git GitHub用語に関してイラスト付きでイメージしやすい説明をされてるサイトがあったので、Git初めてでよくわからないよーという方は見てみてください。
【イラストで覚える】初心者のためのGitとGitHub用語集