P&Dアドベントカレンダー25日目担当seaaaaaaaaaです。
はじめに
初心者の私がよく使っているGitHubのコマンドを紹介したいと思います!!
(注)私は2年前まで実家にネット環境がなく、PCを全く使ってこなかった人間です。
1. commitの取り消し
今回はresetのやり方について紹介します。
(revertに関しては参考記事の方を参考にしてください)
% git log
commit xxxxxxxxxxxxxxxxxxxxx //以下ハッシュ値 // 注目
Author: アカウント名 <登録メールアドレス>
Date: Mon Dec 24 17:05:08 2017 +0900
yyyy //commitした時のメッセージ
% git reset --hard ハッシュ値
HEAD:戻したいcommitのハッシュ値
操作が終え、以下のようになっていると完了です。
% git log
commit ハッシュ値 (HEAD -> branch名) // 左の()が追加されている
Author: アカウント名 <登録メールアドレス>
Date: Mon Dec 24 17:05:08 2017 +0900
yyyy //commitした時のメッセージ
resetとrevertの違いって?
resetは「commitを取り消す」という作業になるため、logから確認ができなくなります。
revertは特定のcommitを元に戻すもので、commitが削除されることはありません。
個人的にはlogを開いたときにわかりにくくなったりするのであまり使うことはないですが、
共同開発で他の人が後から見ても確認ができるので、一般的に推奨されているのはrevertのようです。
2. resetで見れなくなったlogも見る
今回はreflogについて紹介します。
% git reflog
ハッシュ値 HEAD@{num}: コマンド: 動作内容
(例)
de688a4 HEAD@{0}: reset: moving to de688a4fbac0526f8671c
num:Gitを操作した記録が番号順になっている。0が最新。
reflogはHEADが辿ってきた履歴を確認することができます。
つまり、これまでにそのプロジェクトで行なったgitコマンドとその内容を最新のものから順に確認することができます。
なので、上記で述べたresetによる確認できなくなるlogも見ることができます!!!!
ただ、どのcommitにハッシュ値が対応してるかなどはわかりにくくなるので注意です。
(注) reflogは最強ではない!?
addしただけでcommitしてないものがある時に、reset --hardをしてしまうとaddした内容は復元できません。
addすらしてないものももちろん消えます。
最後に
今回は2つのことについてまとめてみました。
開発していく中で役立ったものがあったら、また書いていきます(^0^)
その他、不適切な部分等あればご指摘ください。
参考資料
・[git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法
・【gitコマンド】いまさらのrevert