Git初心者の方は、「Git rebase」を耳にはしたことがあるけれど、まだ使ったことはない!という方が多いのではないでしょうか?
実際に使ってみようとしても、git merge との違いが見い出せなかったり、git rebaseがどんな動きをしているのかイメージがつかなかったりしますよね。そこで今回は、Git rebaseコマンドの使い方を図などを用いて分かりやすくご紹介します。
出典:Wikimedia
この記事の目次
git rebase ってどんなコマンド?
まずgit rebaseを使うとどんなことができるのか、簡単に説明します。
git を使っていると、
- ブランチがたくさん増えてどれがどこから合流しているのか分かりにくい
- ある特定のコミットだけあるブランチに採用したい
- コミットメッセージを書き変えたい
等様々なシチュエーションが出てきますが、
簡単に言うと、コミット履歴を綺麗にしてくれるのが「git rebase」コマンドです。
これを使いこなせると、かなりgit履歴を整理整頓できます。
git rebaseはなにができる?
- 過去のコミットをまとめる
- コミットメッセージを編集する
- ブランチを移動させる
- あるコミットをいいとこ取りできる
- 複数のコミットをまとめる
以上のように、様々な便利機能を使うことができます。
baseを日本語訳すると「基盤」や「土台」となります。
rebaseだと「土台を新しく作り直す」といった意味になるのでgit履歴の土台を書き換えているというイメージを持っていただければ大丈夫です。
この機会に、git reabaseをマスターしていきましょう!
マージとリベースの違い
マージとリベースではコミット履歴の残り方が異なります。
マージではこのようにコミット履歴が残ります。
リベースではこのように、コミット履歴がマージの時とは異なります。
最終的な統合結果は全く一緒ですが、リベースは一本の履歴となり、スッキリして読みやすいのが特徴です。
git rebase でコミットをまとめよう
では実際にgit rebaseコマンドを使いながらコミットをまとめてみましょう。
git rebase -i での使えるコマンド一覧
はじめに、git rebase -i は git rebase –interactive と同義だということを抑えておきましょう。
“git rebase -i <commit>”
これが基本的なコマンドになります。
<commit>の部分には特定のコミットが入ります。
例えば “git rebase -i HEAD~3″と打った場合
このように最後から3つ目までのコミットが表示されます。
するとコミットの先頭にはpickと書かれており、末尾にはコメントが書かれています。
pickの部分を書き換えて処理を行っていきます。
コミットの下には書き換え可能なコマンドがずらりと表示されていますね。
上から見ていきましょう。
- pick – コミットが採用されとくに何も変化はなし
- reword – コミットメッセージの編集
- edit – 指定したコミットで一度処理を止めて修正が可能
- squash – 一つ前のコミットと融合
- fixup – squash とほぼ同じだが、コミットメッセージが反映されずに融合される
- exec – コミットに直接指示するのではなく、shellでコマンドを実行
- drop – コミットを取り除く
git rebase squashで複数のコミットをまとめる
まずは先ほどと同様に、 “git rebase -i HEAD~3” と入力します。
pickの部分を”squash”と書き換えることで、簡単にsquashを実行できます。
これを保存することで上2つの「6be50a5コミット」と 「12252f8コミット」がまとまります。
git rebase –ontoを使ってブランチを自由に移動させよう
“git rebase –onto”を使うことで少し複雑な処理も簡単にできてしまいます。
このようなブランチ構成で、C1とC2のコミットをもったBranch3ブランチだけマスターに持っていきたいとします。
上記のコマンドを使うことで Branch3 は Master の後ろに追加されます。
このように”git rebase –onto”を使うと自由にブランチを移動させることができます。
git rebaseでの裏技をマスターしよう
もうすでに git rebase を用いた裏技をいろいろご紹介しましたが、ここからは更なる裏技の習得となります。
使いこなせるともう git は自由自在です!
git cherry-pickを使っていいとこ取りをしよう
特定のコミットを選んでHEADに追加したい時
→ git cherry-pickコマンドを使いましょう。
まず下記のような構図が存在するとします。
- B2 コミットを上記 Master の A1 (HEAD)に追加したい時
- 「$ git cherry-pick B2」コマンドを入力
Master の A1 の直後に追加することができました。
ここでは B2 が Cherrypick ブランチからコピーされて Master ブランチに追加されています。
git rebase –continueでコンフリクトを解決しよう
git rebaseもマージと同様コンフリクトが起こってしまう時があります。
コンフリクト(競合)が起こってしまった時は問題がある場所を修正してから以下を実行します。
すると git rebase の作業を続けることができます。
この記事のハッシュタグ
編集や取り消し作業に使えるコマンド
git を使っていて
「ここのコミットメッセージわかりずらいから変えたいな」
「ここの部分のコミットいらないな」
など、過去の履歴の編集をしたい時ってありますよね?
そんな時の対処方をお教えします!
git rebase –reword 過去のコミットメッセージを変えたい時
git rebase -iで過去のコミットの一覧をだします。
そしてpickの部分をrewordに変えます。
↓ ↓ ↓
すると、コミットメッセージを編集することができます。
git rebase –abort / rebase コミットをやめたい時
はたまた git rebase で作業をしている時にコンフリクトが発生してしまった時は以下のコマンドを入力。
すると、リベースをキャンセルすることができます!
これを行うことで rebase 前の状態に戻ってくれます。
さきほどの git rebase –continueと機能は違えど同じような使い方をします。
まとめ
いかかでしたか?
git rebaseの使い道、その便利さを習得できたのではないでしょうか。
git rebaseコマンドを駆使して、作業効率をUPしていきましょう!
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。