指定したブランチの変更を現在のブランチに統合します。
| オプション | 説明 |
|---|---|
| --no-ff | 常にマージコミットを作成(Fast-forwardしない) |
| --ff-only | Fast-forwardできる場合のみマージ |
| --squash | すべての変更を1つのコミットにまとめる |
| --abort | コンフリクト発生時にマージを中止 |
| --continue | コンフリクト解決後にマージを続行 |
| -m <メッセージ> | マージコミットのメッセージを指定 |
例:
git merge feature - featureブランチを現在のブランチにマージgit merge --no-ff feature - Fast-forwardせずにマージコミットを作成git merge --ff-only origin/main - Fast-forwardできる場合のみマージgit merge --squash feature - featureブランチの変更をまとめて1つのコミットにするgit merge --abort - コンフリクト発生時にマージを中止git merge -m "Merge feature branch" feature - カスタムメッセージでマージ
ブランチのベースを変更し、コミット履歴を整理します。
| オプション/引数 | 説明 |
|---|---|
| <ブランチ名> | 指定したブランチをベースに現在のブランチを再構成 |
| -i, --interactive | 対話的リベース(コミットの編集、並べ替え、統合などが可能) |
| --onto <新ベース> <古いベース> <ブランチ> | 特定の範囲のコミットを新しいベースに移動 |
| --continue | コンフリクト解決後にリベースを続行 |
| --abort | リベースを中止し、元の状態に戻す |
| --skip | 現在のコミットをスキップしてリベースを続行 |
例:
git rebase main - 現在のブランチをmainブランチの先端に再配置git rebase -i HEAD~3 - 直近3つのコミットを対話的に編集git rebase --onto main feature-base feature - featureブランチのfeature-baseからの変更をmainブランチの先端に再配置git rebase --continue - コンフリクト解決後にリベースを続行git rebase --abort - リベースを中止
注意: リベースはコミット履歴を書き換えるため、既にプッシュした変更に対して行うと問題が発生する可能性があります。共有ブランチでのリベースは避け、個人的なブランチでのみ使用することをお勧めします。
他のブランチから特定のコミットを選んで現在のブランチに適用します。
| オプション/引数 | 説明 |
|---|---|
| <コミットハッシュ> | 取り込むコミットのハッシュ値 |
| -n, --no-commit | 変更をステージングするだけで、コミットしない |
| -e, --edit | コミットメッセージを編集する |
| -x | 元のコミットハッシュをコミットメッセージに追加する |
| -s, --signoff | Signed-off-by行をコミットメッセージに追加する |
| --continue | コンフリクト解決後にcherry-pickを続行 |
| --abort | cherry-pickを中止し、元の状態に戻す |
| --skip | 現在のコミットをスキップしてcherry-pickを続行 |
例:
git cherry-pick abc123 - コミットabc123を現在のブランチに適用git cherry-pick abc123 def456 - 複数のコミットを順番に適用git cherry-pick abc123..def456 - 指定した範囲のコミットを適用(abc123は含まない)git cherry-pick abc123^..def456 - 指定した範囲のコミットを適用(abc123を含む)git cherry-pick -n abc123 - コミットせずに変更をステージングエリアに追加git cherry-pick --continue - コンフリクト解決後にcherry-pickを続行git cherry-pick --abort - cherry-pickを中止
注意: cherry-pickは他のブランチから特定のコミットだけを取り込みたい場合に便利ですが、同じ変更が複数の場所に存在することになるため、後のマージ時に複雑になる可能性があります。
以下は、develop環境からstaging環境に特定の機能や修正を選択的に適用する際のベストプラクティスをスクリプト形式で示しています。
# 1. 最新の状態に更新
git checkout develop
git pull origin develop # develop環境を最新に更新
git checkout staging
git pull origin staging # staging環境を最新に更新
# 2. developブランチで適用したいコミットを特定
git checkout develop
git log --oneline -n 10 # 最近の10件のコミットを表示して適用したいコミットを特定
# 3. コミットIDをメモ(例: abc123, def456)
# 4. stagingブランチに切り替えてcherry-pick実行
git checkout staging
# 単一のコミットを適用する場合
git cherry-pick abc123
# 複数のコミットを適用する場合(順番に適用)
git cherry-pick abc123 def456
# 連続した範囲のコミットを適用する場合
git cherry-pick abc123^..def456 # abc123を含む
# または
git cherry-pick abc123..def456 # abc123を含まない
# 5. コンフリクトが発生した場合の対応
# コンフリクトが発生した場合、ファイルを編集してコンフリクトを解決
git add . # 解決したファイルをステージング
git cherry-pick --continue # cherry-pickを続行
# 途中で中止したい場合
# git cherry-pick --abort
# 6. リモートリポジトリにプッシュ
git push origin staging # 変更をstagingブランチにプッシュ
ヒント:
-x オプションを使用します(例: git cherry-pick -x abc123)。