マージとは?
他の人の変更内容を取り込む作業のことです。
マージ作業の種類
マージ作業には2種類があります。
- プルリクエストがあったベースブランチに対してソースコードのマージを行う。
- ローカルリポジトリのトピックブランチに対してローカルリポジトリのmasterブランチにマージを行う。
マージ方法
- ローカルリポジトリでGitコマンドを使って行う方法
- GitHubを使ってリモートリポジトリを使って行う方法
マージコマンド
1 2 |
git checkout マージしたいトピックブランチ git merge <ブランチ名> |
もしくは
1 2 |
git checkout マージしたいトピックブランチ git merge <リモート名/ブランチ名> |
マージの種類
Fast Foward(ファストフォワード、早送りになるマージ)
ブランチを他の誰かが修正していてその修正を自分のローカルのブランチに対して取り込むことです。マージ時に新しくコミットが作成されるのではなく、他の誰かがコミットした内容にコミットの向き先を変えるマージ方法になります。
なお、この種類のマージの場合はコミットメッセージは作成されません。
Auto Merge(オートマージ、基本的なマージ)
複数のブランチを統合して新しくマージコミットというコミットを作成するマージです。Fast Fowardと異なり新しくコミットができることになります。通常のコミットとの違いとしては親コミットを二つ(「マージ元コミット」と「マージ先コミット」)持っている点です。
コンフリクト
リモートリポジトリ内のマージの方法
マージは下記3つの方法があり状況によって適切なマージ方法を選択する必要があります。
- Create a merge commit
- Squash and merge(スカッシュ)
- Rebase and merge(リベース)
Create a merge commit
トピックブランチの全コミットをそのままベースブランチにマージします。
その際に、「マージコミット」という新しくマージを記録するためのコミットも作成されます。
少なくとも慣れないうちは、三つの方法のうちこのマージを使った方が良いでしょう。
メリット
- トピックブランチの細かいコミットも含めて履歴を確実に詳細に残すことが可能です。
デメリット
- トピックブランチの数が多いと後で履歴が非常に複雑になってしまいます。
Squash and merge(スカッシュ)
トピックブランチで作成したコミットを一つのコミットにまとめた後でマージします。
軽微な修正で何度も同じようなコミットをしてしまった場合とかで履歴が見にくくなる際に使えますね。
なお、すでにコミットがリモートリポジトリにある場合は他のメンバーのリポジトリとさができてしまい混乱させてしまうので、基本的に自分のローカルリポジトリにある場合に使うようにしましょう。
メリット
- ベースブランチの履歴がプルリクエスト単位で整理された形になるため履歴がかなり見やすくなります。
デメリット
- トピックブランチのコミット単位で細かい履歴を確認することができなくなる。
Rebase and merge(リベース)
ブランチの枝分かれ元を変更するリベースという操作を実施した後にマージを行います。
トピックブランチに対してリベースを行うと最新のベースブランチからあたかもトピックブランチを作成したかのような履歴状態を作り出すことができます。
メリット
- 仮にトピックブランチの数が増えたとしてもコミット履歴は常に一直線になり見やすくなります。
デメリット
- 過去のコミット履歴を改版する為コミット IDも変わってしまう為、普通の方法ではプッシュができなくなります。
この記事へのコメントはありません。