📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
|||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
Gitにおいて、mergeコマンドとrebaseコマンドは、異なるブランチの変更を統合するためのコマンドである。<br> | |||
しかし、統合の方針に違いがある。<br> | |||
<br> | <br> | ||
ここでは、masterブランチの過去のコミットから派生した機能開発用のtopicブランチの変更を、masterブランチに取り込むという状況で、2つの方法を比較する。<br> | |||
<br><br> | <br><br> | ||
| 24行目: | 24行目: | ||
* rebase | * rebase | ||
*: 付け替える各コミットにおいて、潜在的にコンフリクトが発生する可能性がある。 | *: 付け替える各コミットにおいて、潜在的にコンフリクトが発生する可能性がある。 | ||
<br><br> | |||
== mergeを使用すべき場合 == | |||
* フィーチャーブランチの履歴を残す場合 | |||
* 既にリモートで共有されているブランチの場合 | |||
* コンフリクト解決を1度で済ませる場合 | |||
* チーム開発で作業の証跡を残す場合 | |||
<br><br> | |||
== rebaseを使用すべき場合 == | |||
* 直線的な履歴が必要な場合 | |||
* ローカルでのみ使用しているブランチの場合 | |||
* 細かい作業履歴を整理する場合 | |||
* master / mainブランチの最新変更を取り込む場合 | |||
<br><br> | |||
== Publicブランチでのrebase禁止 == | |||
既にプッシュされたブランチをrebaseする場合、他の開発者の環境で問題が発生する。<br> | |||
<br> | |||
# 絶対に避けるべき操作 | |||
git checkout main | |||
git rebase feature | |||
<br><br> | |||
== rebase後のプッシュ == | |||
<code>--force-with-lease</code>オプションとは、他の開発者が同じブランチを更新していないことを確認できる安全なオプションである。<br> | |||
<br> | |||
# rebase後に強制プッシュが必要 | |||
git push --force-with-lease origin feature | |||
<br><br> | |||
== マージ戦略の一貫性 == | |||
チーム内で統一されたマージ戦略を実施することが重要となる。<br> | |||
<br> | |||
# マージコミットを必ず作成する場合 | |||
git merge --no-ff feature | |||
# rebaseした後にマージする場合 | |||
git checkout feature | |||
git rebase main | |||
git checkout main | |||
git merge --ff-only feature | |||
<br><br> | |||
== 推奨される方法 == | |||
==== 作業開始時の基点更新 ==== | |||
git checkout main | |||
git pull | |||
git checkout -b feature | |||
# 作業開始 | |||
<br> | |||
==== 定期的な同期 (rebaseの場合) ==== | |||
git checkout feature | |||
git rebase main | |||
# コンフリクト解決 | |||
git push --force-with-lease origin feature | |||
<br> | |||
==== マージ前の履歴整理 ==== | |||
# コミットを整理 | |||
git rebase -i HEAD~3 | |||
# スカッシュマージ | |||
git merge --squash feature | |||
<br><br> | <br><br> | ||