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