【入門編】Gitの隠し芸!rebaseとcherry-pickを使いこなしてコミット履歴を美しく保つ技術 – バージョン管理・CI/CD活用バイブル

ようこそ、Gitの深淵なる世界へ。

私はこれまで、数千人規模のエンジニアが交差する巨大なプロジェクトから、一分の隙も許されない超高速CI/CDパイプラインの構築まで、あらゆる「現場」を渡り歩いてきました。そこで確信したことがあります。

「Gitの履歴が美しいチームは、コードの品質も高く、デリバリー速度も速い」

なぜでしょうか? それは、コミット履歴が単なる「バックアップ」ではなく、開発者同士の「対話の記録」であり、未来の自分への「地図」だからです。

今日は、初心者の方が一歩踏み出し、中級・上級者への階段を駆け上がるための必須テクニック、`rebase`(リベース)と`cherry-pick`(チェリーピック)を伝授します。これらを使いこなせば、あなたのプルリクエストは劇的に読みやすくなり、チームメンバーから「君のコードは追いかけやすいね」と一目置かれるようになるはずです。

準備はいいですか? さあ、始めましょう。

—

1. なぜ「美しい履歴」にこだわるのか?

Gitを使い始めたばかりの頃は、とりあえず `git add .` して `git commit -m “update”` を繰り返してしまいがちです。しかし、そのままマージを繰り返すと、履歴はスパゲッティのように絡まり、どの変更がどの機能に対応しているのか、後から追うことが不可能になります。

  • Merge(マージ): 複数の歴史を「合流」させる。履歴に分岐と合流の跡が残る。
  • Rebase(リベース): 歴史を「作り直す」。土台を差し替えて、一直線の履歴を作る。

CI/CDの観点からも、履歴が一直線であることは非常に重要です。不具合が発生した際、どのコミットが原因かを特定する `git bisect`(二分探索)の精度が飛躍的に高まるからです。

—

2. 土台を整える:Gitの基本セットアップ

まずは、プロとして恥ずかしくない基本設定を済ませましょう。ターミナル(CLI)を開いてください。

ユーザー名とメールアドレスの設定(これがコミットの署名になります)
git config –global user.name “Your Name”
git config –global user.email “your-email@example.com”

エディタの設定(rebase -i で使用します。VS Code派なら code –wait)
git config –global core.editor “vim”

ログを見やすくするエイリアス(これだけで世界が変わります)
git config –global alias.graph “log –graph –date=short –decorate –pretty=format:’%C(yellow)%h%Creset %C(magenta)%ad%Creset%C(auto)%d%Creset %s %C(cyan)@%an%Creset'”

これで、`git graph` と打つだけで、歴史の分岐が美しくカラー表示されるようになります。

—

3. 歴史を書き換える魔術:`git rebase`

仕組み:土台のすり替え

あなたが `feature` ブランチで作業している間に、本流の `main` ブランチが更新されたとしましょう。ここで `merge` を使うと「Merge branch ‘main’ into feature」という余計なコミットが残ります。

`rebase` を使うと、あなたの変更を一度「脇に退避」させ、`main` の最新状態の上に、一つずつコミットを「積み直し」ます。

実践:対話的リベース(interactive rebase)

これが今回の真打ちです。「細かいコミットを一つにまとめたい」「コミットメッセージを修正したい」という時に使います。

最新の3つのコミットを整理する場合
git rebase -i HEAD~3

実行するとエディタが開き、以下のようなリストが表示されます。

pick a1b2c3d 機能Aの実装
pick e5f6g7h typo修正(消したい)
pick i9j0k1l 機能Aのテスト追加

Rebase 1234567..i9j0k1l onto 1234567
Commands:
p, pick = そのまま使う
s, squash = 前のコミットに統合する
r, reword = コミットメッセージだけ書き換える

ここで `e5f6g7h` の `pick` を `s` (squash) に書き換えて保存すると、2番目のコミットが1番目に吸収されます。これで、「動作確認中の細かいゴミコミット」を消し去り、完璧な一つの成果物として歴史を整えることができるのです。

—

4. 欲しい実だけを摘み取る:`git cherry-pick`

仕組み:特定のコミットの移植

「別のブランチで書いたあのバグ修正だけ、今すぐこっちのブランチに持ってきたい」という場面があります。ブランチごとマージすると余計な機能まで入ってしまいます。

そんな時、`cherry-pick` は特定のコミット(実)だけを摘み取って、現在のブランチに適用します。

実践:特定のコミットを狙い撃つ

1. 欲しいコミットのハッシュ値を特定(git graphを活用)
git graph

2. そのコミットだけを適用
git cherry-pick a1b2c3d

これで、必要な修正だけが魔法のように現在のブランチに再現されます。

—

5. 現場で震えるほど役立つ「運用の鉄則」

これらの強力な武器を使いこなすために、私が現場で守っている3つの鉄則を共有します。

① 共有済みのブランチでは絶対に `rebase` しない

`rebase` は歴史を書き換えます。すでに GitHub 等に push し、他の人が作業ベースにしているブランチで `rebase` を行うと、他の人の環境で歴史の不整合(コンフリクトの嵐)が起き、チームが崩壊します。「Rebaseは自分の手元(ローカル)だけで完結させる」のが鉄則です。

② コミットは「意味のある最小単位」で

`rebase` でまとめられるからといって、何でもかんでも一気にやるのは禁物です。「ログイン機能の実装」と「ロゴの画像差し替え」は分けるべきです。後で `cherry-pick` しやすくなるからです。

③ Pushする直前に `rebase -i` で整える

作業中は汚くても構いません。しかし、プルリクエストを送る直前に `rebase -i` を行い、レビューする人が読みやすいように物語を整理してください。それがプロの仕事です。

—

6. 動作確認:美しき「Hello World」

最後に、一連の流れを体験してみましょう。

1. 実験用リポジトリ作成
mkdir git-lesson && cd git-lesson
git init

2. 最初のコミット
echo “Hello” > file.txt
git add .
git commit -m “Initial commit”

3. 作業ブランチ作成
git checkout -b feature/cool-stuff
echo “Cool” >> file.txt
git commit -am “Coolな機能を追加”

4. 細かい修正(本来は一つにまとめたい)
echo “Fix typo” >> file.txt
git commit -am “fix: typo”

5. 歴史を整える
git rebase -i HEAD~2
(エディタで2番目を squash にし、メッセージを「Coolな機能を完璧に実装」に変更)

6. 確認
git graph

どうですか? あなたのターミナルには、無駄な枝分かれのない、美しく整った一直線の歴史が表示されているはずです。

結びに代えて

Gitのコマンドを覚えることは、単なる操作の習得ではありません。それは「自分の思考を整理し、他者に伝える技術」を磨くことと同義です。

`rebase` と `cherry-pick` を使いこなせるようになったあなたは、もう初心者ではありません。自信を持って、その美しい履歴をチームに届けてください。毎日の開発が、驚くほどスムーズで心地よいものに変わることを約束します。

次は、この美しい履歴を前提とした「究極のCI/CDパイプライン」の世界でお会いしましょう。

Happy Committing!

タイトルとURLをコピーしました