LinuCレベル3 プラットフォームスペシャリスト プラットフォームの運用管理 問22
プラットフォームの運用管理/インフラ構成のGit管理とパイプラインの自動化インフラ構成のリポジトリで、作業ブランチfeatureにチェックアウトしている。mainの最新の変更を取り込みつつ、マージコミットを作らず、featureのコミットがmainの先端から続く一直線の履歴にしたい。実行するコマンドとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの運用管理」に対応。実際の試験問題ではありません)
- Agit merge --no-ff main
- Bgit reset --hard main
- Cgit cherry-pick main
- Dgit rebase main
正解:D
解説
git rebase main は、featureにあってmainに無いコミットを取り出し、mainの先端の上に順に適用し直します。その結果、マージコミットの無い一直線の履歴になり、レビューや差分の確認がしやすくなります。ただし、適用し直したコミットは新しいコミットIDを持つため、既にpushして他の人が使っているブランチでrebaseすると履歴の食い違いが起こります。そのようなブランチでは、rebaseを避けるか、チームで運用ルールを決めておく必要があります。
選択肢ごとの解説
- A誤り。--no-ff は早送りできる場合でも必ずマージコミットを作るオプションで、要件と逆の結果になります。
- B誤り。reset --hard main はfeatureの指す先をmainと同じコミットに移し、featureで行ったコミットが履歴から外れてしまいます。
- C誤り。cherry-pick main はmainの先端の1コミットだけをfeatureの上に複製するもので、mainの変更をすべて取り込むことにはなりません。
- D正しい。rebaseはfeatureのコミットをmainの先端の上に適用し直し、マージコミットの無い一直線の履歴にします。