はじめに
現在Git(GitHub)をガンガン触っていく案件にアサインされたのですが、その中でもたまにしか使わない必須知識がいくつかあったので紹介します。
主に自分の振り返り用に書いているので、色々端折ってますがご了承ください。
git log
■使用タイミング
・ローカルリポジトリのコミット履歴を振り返りたいとき
自分自身git logコマンドの有能なオプションは把握しきれていないのですが、ローカルリポジトリのコミット履歴を追いたい場合は下記コマンドが有効です(他に有能なオプション発見次第追記します)。
$ git log --oneline --graph
git reset
■使用タイミング
・リモートリポジトリに誤ってpushしたときに取り消す
・コミット履歴を残さず、前のコミットに戻りたいとき
上記のように、あなたは間違って重要なリモートブランチにpushしてしまったとします。
$ git reset --hard HEAD^
$ git push -f
しかし上記を行ってGitHubを見てみると最新のコミット履歴が無くなります。
git revert
■使用タイミング
・誤ってリモートリポジトリのプルリクを打ち消したいとき
・コミット履歴を残したまま、前のコミットに戻りたいとき
■使用例
git revertではgit pushと違い、以前のコミット履歴を打ち消すコミットを作成してリモートリポジトリにpushすることでpush履歴を残したまま以前のコミットに戻ることができます。
$ git revert "直前コミット"
$ git push
そして他にもマージの取り消しも行えます。
# ブランチを新規で作成する
$ git revert -m 1 "取り消したいマージコミット"
$ git push
# 上記ブランチをプルリク
# 元に戻る!!
めちゃ簡単ですよね。
一応、「git reset --hard HEAD^」→「git push -f」のコンボでマージ前のコミットに戻ることは可能ですが、masterブランチにて作業する必要があるの(コミット履歴も残らない)と、別ブランチを切る場合はプルリク出せなくなるので実務ではgit revert一択だと思います。
git mergeとgit rebaseについて
しかし、git rebaseするとコミット履歴は以下となる。
扱いが難しくリモートにpush済みの場合は、使用に向いていないらしく中級者向けと言えます。
git squash
$ git rebase -i "まとめたいコミットより1つ前のコミット"
# viにてコミットをまとめて、コメントを修正する
まとめ
git難しいけど面白い!!
適宜ノウハウを更新します。