やらかした時に助けてくれるGitコマンド備忘録①
はじめに:ブログを書くに至った経緯
プログラミング初心者にとってGitやGitHubって慣れないうちは触るのが結構怖い・・・。
自分も「本当にこのコマンドで大丈夫?」とか「せっかく作ったコードが上書きされて消えたらどうしよう・・・」とか思いながら恐る恐る操作をしていた。
なぜ怖いのか考えてみると「取り返しのつかないミスをしたらどうしよう・・・」という気持ちが恐怖心に繋がってることに気づく。
あいにくGitは優しいので、大体のミスは取り返しがつく。
それならミスの取り返し方をまとめておけば便利ではないかと思い、ブログを書くことにした。
その1:前のコミットからコードを変更したら動かなくなった!
「コードを変更したら動かなくなった」という時には、動いていたときのコミットを指定してgit reset --hard
をすれば良い。
コミットの指定はHEAD
を使用した相対位置指定でも良いし、コミットIDをそのまま指定しても良い。
$ git reset --hard HEAD~
その2:不要なファイルをステージしてしまった!
間違って必要ないファイルをgit add
でステージしてしまったときはgit reset (--mixed)
でインデックスを一旦リセットする。
作業中のファイルの状態は変更されない。
$ git reset (--mixed) HEAD~
その3:間違えてresetを実行してしまった!
もちろん、git reset
自体も取り消すことができる。
git reflog
を使うと以下のように、git reset
を行った履歴まで確認できる。
戻したい位置のコミットIDを指定してgit reset
をしてやればOK。
$ git reflog af6a6ac (HEAD -> master) HEAD@{0}: reset: moving to HEAD^^ 8a2ca57 HEAD@{1}: reset: moving to 8a2ca576c 8a2ca57 HEAD@{2}: commit: 1行目と2行目を修正 8938aed HEAD@{3}: commit: 2行目を追加 af6a6ac (HEAD -> master) HEAD@{4}: commit (initial): first commit
ちなみにこのgit reflog
ブランチ削除の履歴も残してくれるので「必要なブランチを削除してしまった❗」というときにも使える最強のコマンド。
その4:コミットするブランチを間違えてしまった!
ブランチを分けて作業するはずが、ずっとmasterブランチにコミットしてしまっていた!ということはよくある。
そんな時に使えるのがgit cherry-pick
コマンド。
例えば以下のように、developmentブランチで行うはずだった作業を間違えてmasterブランチにcommitしてしまっていた時を考えてみる。
$ git log --oneline f76b506 (HEAD -> master) developmentブランチで4行目を追加 2312bd3 developmentブランチで3行目を追加 8a2ca57 1行目と2行目を修正 8938aed 2行目を追加 af6a6ac first commit
もともとブランチを作る予定だった位置にブランチを作成。
git checkout
でブランチを切り替える。
$ git branch development 8a2ca57 $ git checkout development Switched to branch 'development'
masterのログを調べて、developmentブランチに移動させたいコミットのIDを調べる。
移したいコミットのIDを指定してgit cherry-pick
を実行。
これでdevelopmentブランチにコミットがコピーされた。
$ git cherry-pick 2312db3 $ git cherry-pick f76b506
あとはmasterに残っている不要なコミットを削除する。
$ git checkout master $ git reset --hard 8a2ca57 HEAD is now at 8a2ca57 1行目と2行目を修正
確認してみると、理想とする形になったのがわかる。
$ git log --oneline --decorate --graph master development * 9f1cc9f (development) developmentブランチで4行目を追加 * 46f25f6 developmentブランチで3行目を追加 * 8a2ca57 (HEAD -> master) 1行目と2行目を修正 * 8938aed 2行目を追加 * af6a6ac first commit
その5:コミットメッセージを間違えてしまった!
コミットした後にコミットメッセージを修正したくなることは結構ある。
単純に間違えてしまった時や、もっといい表現が思いついた時にはgit commit --amend
を使うと良い。
以下のコマンドを実行するとエディタが立ち上がり、直前のコミットメッセージを書き換えることができるようになる。
$ git commit --amend
また、このコマンドは直前のコミットに変更点を追加したいときにも便利。
新たにコミットを作成するほどでもない小さな変更点が見つかったときには、対象ファイルをステージした後git commit --amend
を実行すればOK。
まとめ
今回は基本的な救済コマンドをまとめたが、まだまだ自分の知らない便利なコマンドは大量にあるため定期的に備忘録としてまとめていきたい。
やらかした時の対処法を知っておけばGitの操作に抵抗がなくなり、開発の効率やコミットの質も向上すると思う。
ただ、Gitの救済措置に甘えすぎず、イージーミスを減らす努力も忘れないようにしておきたい・・・。
参考URL
git reset コマンドの使い方と、主要オプションまとめ | WWWクリエイターズ