Git のマージ メモ


マージ (merge) とは?

  • 加えた修正を統合する作業
  • 自分の変更を加えたブランチを、元のブランチにマージすることによって、修正を流し込む。
  • 変更を持ってるブランチと、変更を流し込まれるブランチを指定して行う。
    • git コマンドや SourceTree の場合は、流し込む先のブランチに移動してから、取り込みたい変更を持っているブランチを指定して行う。

競合 (conflict)

  • ほとんどの場合、Git は自動的にコミットを合成 (?) してくれるが、自動的にできない場合、競合が起きる。
  • マージする両方のブランチの同じ個所に修正があると、競合を起こす場合がある。
  • この場合は、手動でどうすべきかを指定する。

競合の例

  • 修正前
original
int main(int argc, char **argv)
{
    printf("foo");
    return 0;
}
  • master ブランチ
    • "foo""bar" に書き換えた。
master
int main(int argc, char **argv)
{
    printf("bar");
    return 0;
}
  • develop ブランチ
    • "foo""baz" に書き換えた。
develop
int main(int argc, char **argv)
{
    printf("baz");
    return 0;
}
  • これを、master ブランチに移動して、 develop ブランチをマージする
merge
int main(int argc, char **argv)
{
<<<<<<< HEAD
    printf("bar");
=======
    printf("baz");
>>>>>>> develop
    return 0;
}
  • 競合した部分を修正してコミットする
merge
int main(int argc, char **argv)
{
    printf("foo bar baz");
    return 0;
}

参考資料