カボチャとマージ
機能ブランチでの作業では、自己完結型の小さなコミットを作成することがよくあります。このような小さなコミットは、機能のビルドプロセスを説明するのに役立ちますが、機能の終了後に Git の履歴が乱雑になる可能性があります。機能を完成させたら、これらのコミットをまとめて Git リポジトリのマージ履歴をすっきりさせましょう。それには、_squash and merge_戦略を使います。
- 小さなコミットをひとつにまとめることで、すべての変更を簡単に取り消せるようになります。
- ひとつのコミットがターゲットブランチにマージされる際には、コミット履歴がすべて保持されます。
- ベースブランチはクリーンなままで、意味のあるコミットメッセージが含まれます。
ブランチがベースブランチにマージするたびに、最大で 2 つのコミットが追加されます:
- ブランチからコミットをつぶして作成されるコミット。
- プロジェクトで早送りマージを有効にしていない限り、マージコミットです。早送りマージはマージコミットを無効にします。
デフォルトでは、スクショされたコミットには以下のメタデータが含まれます:
- メッセージ:スクワッシュしたコミットの説明、あるいはカスタマイズしたメッセージ
- 作成者マージリクエストを作成したユーザー。
- コミッタースクワッシュを開始したユーザー
プロジェクトオーナーは、すべてのスクワッシュコミットやマージコミットに対して新しいデフォルトメッセージを作成することができます。
マージリクエストのデフォルトスクワッシュオプションの設定
マージリクエストを作成または編集する権限を持つユーザーは、マージリクエストのデフォルトスクワッシュオプションを設定することができます。
前提条件:
- あなたのプロジェクトがスクワッシングを許可または推奨する設定になっている必要があります。
そのためには
- マージリクエストに移動し、編集を選択します。
- Squash commits when merge request is acceptedチェックボックスを選択もしくはクリアします。
- 変更を保存を選択します。
マージリクエストでのスクワッシュコミット
プロジェクトでマージリクエストのスクワッシングオプションを選択できる場合は、マージ処理の一環としてコミットをスクワッシングします:
- マージリクエストに移動し、マージボタンを含むマージリクエストレポートセクションまでスクロールします。
- Squash commitsチェックボックスが選択されていることを確認してください。プロジェクトの squashing オプションがDo not allowまたはRequireに設定されている場合、このチェックボックスは表示されません。
- オプションです。プロジェクトの設定に応じて)スクワッシュコミットメッセージまたはマージコミットメッセージを変更するには、コミットメッセージの変更 を選択します。
- マージリクエストがマージできる状態になったら、[マージ]を選択します。
プロジェクトのスカッシュオプションの設定
- GitLab 13.2から導入された
squash_options
というフラグで、デフォルトでは無効になっています。- GitLab13.3ではGitLab.comで有効化され、デフォルトで自己管理。
- GitLab 13.8で一般的に利用可能に。機能フラグ
squash_options
を削除しました。
前提条件:
- 少なくともこのプロジェクトのメンテナーのロールを持っている必要があります。
プロジェクト内のすべてのマージリクエストに対するデフォルトのつぶす動作を設定するには、次のようにします:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定 > マージリクエストを選択します。
-
Squash commits when mergingセクションで、希望する動作を選択します:
- Do not allow:許可しない: スクワッシュは実行されず、オプションは表示されません。
- 許可します:許可されますが、デフォルトではクリアされます。
- Encourage:Squashingは許可され、デフォルトで選択されていますが、無効にすることもできます。
- Require:スカッシュは常に実行されます。マージリクエストはスクワッシュするオプションを表示しますが、ユーザーは変更できません。
- 変更を保存を選択します。