Gitでローカルブランチの履歴を公開せずにきれいな1コミットだけをmainに反映する

プログラミング
スポンサーリンク

はじめに

こんにちは!

Git ではプルリクエストを使った運用「ローカルでブランチを作成 → 作業内容をコミット → プッシュしてプルリクエスト(PR)を作成 → 管理者がマージ」という流れが一般的です。この方法はチームでの共同開発において、履歴の可視性やレビュー体制の整備に非常に有効です。

しかし、以下のようなケースも存在します。

  • ローカルで細かく作業したいけれど、サーバーにその作業履歴を残したくない
  • プルリクエストの作成やレビューを経ずに、自分の責任でコミットを反映したい
  • ブランチをリモートに作成したくない(機密性・煩雑さの回避など)

今回は「細かくローカルでコミットしたいけど、その履歴をサーバーに残したくない」という条件下で、Gitのローカル作業履歴をリモートに残さず、きれいに1コミットだけ main ブランチに反映する方法、「ローカルブランチ + rebase + cherry-pick」を使った運用方法を調べて整理しました。

ローカルブランチを使った管理

実際の作業を交えて説明していく

1. 主流ブランチから作業ブランチを作成

git checkout main
git pull origin main # 最新を取得
git checkout -b feature-x # ローカル専用ブランチ

2. ローカルブランチで細かく作業・コミット

git commit -m "初期レイアウト作成"
git commit -m "スタイル修正"
git commit -m "JS微調整"

3. 3つのコミットを1つにまとめる(squash)

この作業を行う前に git branch backup-x でバックアップを取っておくと良い

main の最新ブランチを取り込む

git fetch origin

現在のブランチの、main からの差分コミットを操作する対話的リベースを行う

git rebase -i main

これを実行するとエディタが開かれる

pick a1a1a1 初期レイアウト作成
pick b2b2b2 スタイル修正
pick c3c3c3 JS微調整

1行目以外をsquashへ変更して上書きする

pick a1a1a1 初期レイアウト作成
squash b2b2b2 スタイル修正
squash c3c3c3 JS微調整

コミットメッセージがエディタが開かれるので好きなメッセージへ書き直す

UI初期実装
- 初期レイアウト作成
- スタイル修正
- JS微調整

この時点で、ブランチ feature-x 上に 1つのコミットだけが残る

主流ブランチで変更があった場合

git rebase -i main を実行する前に main に変更を加えていた場合

main: A --- B ← 他の人が push(あなたはまだ知らない)
          \
feature-a: C --- D --- E

git は次のように動く

  1. あなたのコミット C, D, E を一時的に取り外し
  2. 最新の main(A → B)を取り込む
  3. C, D, EB の後ろに再適用し直す
main: A --- B
              \
feature-a:     C' --- D' --- E' ←(新しく再適用された履歴)

ここでC', D', E' は新しいコミットハッシュになる

コンクリフトが発生していた場合

コンフリクトした場合、ファイルを編集して修正を行って、rebaseを再開する

git add <修正したファイル>
git rebase --continue

作業を中止したくなったら以下で中止が出来る

git rebase --abort

4. 主流ブランチへ作業内容を取り込む

主流ブランチへ切り替えして最新を取得し

git checkout main
git pull origin main

git log などでハッシュを確認しておいた feature-a のコミットを cherry-pick

git cherry-pick <feature-x のコミットハッシュ>

これで main に 1コミットだけが反映され、3つのコミットやブランチXの存在はリモートに出ない。

5. リモートへ push

以下によりサーバーには、1つのきれいなコミットだけが追加される

git push origin main

ローカルブランチ feature-x は削除する

git branch -d feature-x

ローカルブランチは push していないので、痕跡ゼロ

おわりに

ここまでお読みいただきありがとうございました!

ローカルでの細かい作業履歴を公開せずに、意味のある1コミットだけを main に反映する方法についてご紹介しました。

Git の履歴を丁寧に扱うことで、チームの可読性とメンテナンス性が大きく向上します。

皆さんのGitライフに少しでも役立てば幸いです。

コメント

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