はじめに
こんにちは!
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 は次のように動く
- あなたのコミット
C
,D
,E
を一時的に取り外し - 最新の
main
(A → B)を取り込む C
,D
,E
をB
の後ろに再適用し直す
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ライフに少しでも役立てば幸いです。
コメント