Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。
前回の 第4話 では、コンフリクトの解決方法を学びました。
・コンフリクトした箇所を修正して、コミットしなおす
$ git commit -m
・コンフリクトした箇所が多すぎて修正が難しい場合、マージを中止する
$ git merge --abort
今回の第5話では、特定のコミットを打ち消すコマンド「リバート」について学びます。機能としてはシンプルなので、初心者でも使いやすいうえに、いざというとき便利なコマンドです。このマンガを通して、わかばちゃんと一緒に知識を身につけていきましょう!
コミット済みの内容を、あとから取り消したい!
このマンガのように、コミット済みの内容を取り消さないといけない場合、どうしたらいいか分からず、あわててしまったことはありませんか?
Gitにはコミットした内容を取り消す方法がいくつかありますが、まずは一番安全で簡単な「リバート」を習得しましょう。
リバートしてみよう
リバートは、指定したコミットと逆の内容をコミットしてくれます。
コマンドは、たったこれだけです。
コマンドは、たったこれだけです。
& git revert [打ち消したいコミットID]
ちなみに、リバート(revert)は英語でいうと、「元に戻す」という意味です。
▼ リバートすると、このようにコミットメッセージ編集画面になります
▼ 編集する必要がなければ、Escキーを押してから「ZZ」と入力することで確定されます。 見事、リバートコミットが作られました
git revert 、マスターしたよ!これでいくら間違えても大丈夫だね。
って、おいおい……。さすがにこの履歴は読みづらいよ。
た、確かに…。そういえば、さっきリバート以外にも取り消せるコマンドはあるって言ってたよね。そっちを教えてよ!
ん~、リセットか……。リセットはちょっと危険だから初心者には教えないようにしているのだが、リフログと一緒に覚えてもらえば……。ブツブツ
ブツブツ言ってないでさっさと教えなさい!それでも大学教授なの!?
前から思っていたのだが、いつの間にか上下関係逆転してないか?
★魔王教授のコラム
リバートが便利なのは、プッシュ済みのコミットを打ち消したいとき。プッシュ済みのコミットは、そのまま上に新しいコミットを乗せる形で「打ち消し」を行えるからだ。
一方、次回説明するリセットは、コミットそのものを消去してしまう強力なコマンドだ。すでに他のメンバーがそれを親としてコミットを重ねてしまっているときにリセットをしてしまうと、他のメンバーがプッシュ不能になってしまう。それもそのはず、あるはずの親がいなくなっているからだ。
というわけで、初心者の頃は無理せずリバートを使うことをオススメする。リセットは、Gitに慣れてきたら習得していこう。
まとめ
さて、ここまででコミットを打ち消す方法がわかりました。
・特定のコミットを打ち消す
& git revert [打ち消したいコミットID]
コミットの歴史を改変するのではなく、新しくコミットが上に積まれるだけなので安心して使えるコマンドです。
Gitにはまだまだたくさんのコマンドがあります。
次回、第6話では git reset(リセット)について学んでいきましょう。
▼登場キャラクター紹介
▼わかばちゃんが登場する書籍
▼ これまでの「マンガでわかるGit」
第1話「リポジトリの作成」
第2話「ブランチの概念」
第3話「マージの仕組み」
第4話「コンフリクトの修正」
第5話「git revert」
第6話「git reset 3種類」
第7話「git reflog」
第8話「git switchとgit restore」
第9話「git diff」
第10話「git cherry-pick」
第11話「git stash」
第12話「git grep」
第13話「git blame」
第14話「git remote」
第15話「.gitconfig でコマンドを短縮」
第16話「.gitconfig と .git/config で複数のGitアカウントを使い分ける」
第17話「prune オプション」
第18話「git tag」
第19話「detached HEAD 状態って何?」
第2話「ブランチの概念」
第3話「マージの仕組み」
第4話「コンフリクトの修正」
第5話「git revert」
第6話「git reset 3種類」
第7話「git reflog」
第8話「git switchとgit restore」
第9話「git diff」
第10話「git cherry-pick」
第11話「git stash」
第12話「git grep」
第13話「git blame」
第14話「git remote」
第15話「.gitconfig でコマンドを短縮」
第16話「.gitconfig と .git/config で複数のGitアカウントを使い分ける」
第17話「prune オプション」
第18話「git tag」
第19話「detached HEAD 状態って何?」