ファイルの保存領域
- ワーキングツリー
- ステージング(インデックス)
- リポジトリ
上記の3種類があるそうです。ただ、この説明だとイマイチ自分自身ピント来なかったので、おなじみの作業開始時・add・commitをしたときにステージングやリポジトリがどう変化するか図示してみます。
とりあえず、3回コミットした状態から作業を開始する前提です。
とりあえず新しく作業した
add した↓
commitした↓
commitを取り消したい
よく分かってなかった、reset コマンド
基本的にresetコマンドはcommitを取り消すためのコマンドですが、保存領域が3つあるので、オプションによってどれをどこまで戻すか指定します。
状態としてはA > B > C > D と4回コミットしてそこからDの内容を取り消したい。という状態を想定します。
①全てなかったことに 【reset --hard】
git reset --hard HEAD^
使用頻度は一番低いかと思います。ステージングもワークツリーも全て過去に戻りますので、作業を全くしていない状態に戻ります。
②HEADだけ戻したい(commitする前) 【reset --soft】
git reset --soft HEAD^
③ステージングも戻したい(addする前) 【reset --mixed or オプションなし】
git reset --mixed HEAD^
↑これが、こうなります↓
gitで追跡する必要のないlogファイルなどをaddしてしまった時に使えるかと。
リモートにPush済みのcommitを取り消した
まだ、リモートにPushする前であれば、上記のresetコマンドでの対応でも問題ないかと思います。ただ、リモートにPushしたあとに、やっぱり取り消したいという場合は、resetコマンドを使ってしまうと再度プッシュする際にerrorが出てしまいます。
リモートには
A > B > C > D
まで記録されているが、ローカルではCからの作業追加をプッシュする形となるため。
git push -f
などで強制的にリモートをローカルで上書きする方法もありますが、危険性が高いので避けた方がいいか
と。
revert で打ち消す
revertコマンドでは、変更内容を相殺するcommitをしてくれます。
なので、DからCへ戻しました。という履歴も残ります。
この場合再度、pushしてもエラーになりません。
参考にさせて頂いたサイト
図示するソフトを探す
図があったほうがわかりやすいと思いドローイングソフトを探すところからはじめました。
https://dev.classmethod.jp/etc/drawing_tools/
実際に使ったドローイングソフト
最後に
githubも理解が浅いため、またググって、投稿しようと思います。
おかしな点あれば、まさかりいただけると幸いです。