マージできない場合は? 競合の発生

Backlog編かGitHub編を選んでください。

Backlog編

ソースコードが競合を起こし、自動でマージできない場合があります。例えば、次の図のようなケースで競合は発生します。

初めて競合状態に直面すると、どのように対応していいかが分からなくなります。競合状態を作るまでの前準備が少しかかりますが、ここで体験しておきましょう。

1. 初期状態の作成

それでは実際に、競合が発生する状態を再現したいと思います。

sort.jsの一方のブランチを等価演算子(==)、もう一方を厳密等価演算子(===)を使用し競合を起こします。まず、先ほどの手順と同様にテスト用のリポジトリを作成し、以下のソースコードをmasterブランチにプッシュします。

sort.jsvar number = [19, 3, 81, 1, 24, 21];
console.log(number);

2. ブランチを作成

2つのブランチを作成します。

$ git checkout -b add-sort-func2
$ git checkout -b add-sort-func1

3. add-sort-func1 ブランチでソースコードを編集してプッシュ

「add-sort-func1」ブランチ上で、ソースコードを編集します。

sort.jsvar sortNumber = function (number) {
number.sort(function (a, b) {
if (a === b) {
return 0;
}
return a < b ? -1 : 1;
});
};

var number = [19, 3, 81, 1, 24, 21];
sortNumber(number);
console.log(number);

修正が完了したらコミットしてプッシュします。

$ git add sort.js
$ git commit -m "配列をソートする処理を追加しました"
$ git push origin add-sort-func1

4. add-sort-func1 ブランチのプルリクエストを作成しマージ

プルリクエストを作成し、マージします。

5. add-sort-func2 ブランチでソースコードを編集してプッシュ

ブランチを「add-sort-func2」に切り替えます。

$ git checkout add-sort-func2

ソースコードを編集します。

sort.jsvar sortNumber = function (number) {
number.sort(function (a, b) {
if (a == b) {
return 0;
}
return a < b ? -1 : 1;
});
};

var number = [19, 3, 81, 1, 24, 21];
sortNumber(number);
console.log(number);

修正が完了したらコミットしてプッシュします。

$ git add sort.js
$ git commit -m "配列をソートする処理を追加しました"
$ git push origin add-sort-func2

6. add-sort-func2 ブランチのプルリクエストを作成

7. 競合が発生した状態になります。

GitHub編

ソースコードが競合を起こし、自動でマージできない場合があります。例えば、次の図のようなケースで競合は発生します。

初めて競合状態に直面すると、どのように対応していいかが分からなくなります。競合状態を作るまでの前準備が少しかかりますが、ここで体験しておきましょう。

1. 初期状態の作成

それでは実際に、競合が発生する状態を再現したいと思います。

sort.jsの一方のブランチを等価演算子(==)、もう一方を厳密等価演算子(===)を使用し競合を起こします。まず、先ほどの手順と同様にテスト用のリポジトリを作成し、以下のソースコードをmasterブランチにプッシュします。

sort.jsvar number = [19, 3, 81, 1, 24, 21];
console.log(number);

2. ブランチを作成

2つのブランチを作成します。

$ git checkout -b add-sort-func2
$ git checkout -b add-sort-func1

3. add-sort-func1 ブランチでソースコードを編集してプッシュ

「add-sort-func1」ブランチ上で、ソースコードを編集します。

sort.jsvar sortNumber = function (number) {
number.sort(function (a, b) {
if (a === b) {
return 0;
}
return a < b ? -1 : 1;
});
};

var number = [19, 3, 81, 1, 24, 21];
sortNumber(number);
console.log(number);

修正が完了したらコミットしてプッシュします。

$ git add sort.js
$ git commit -m "配列をソートする処理を追加しました"
$ git push origin add-sort-func1

4. add-sort-func1 ブランチのプルリクエストを作成しマージ

プルリクエストを作成し、マージします。

5. add-sort-func2 ブランチでソースコードを編集してプッシュ

ブランチを「add-sort-func2」に切り替えます。

$ git checkout add-sort-func2

ソースコードを編集します。

sort.jsvar sortNumber = function (number) {
number.sort(function (a, b) {
if (a == b) {
return 0;
}
return a < b ? -1 : 1;
});
};

var number = [19, 3, 81, 1, 24, 21];
sortNumber(number);
console.log(number);

修正が完了したらコミットしてプッシュします。

$ git add sort.js
$ git commit -m "配列をソートする処理を追加しました"
$ git push origin add-sort-func2

6. add-sort-func2 ブランチのプルリクエストを作成

「Pull requests」メニューから「New pull request」ボタンを押してプルリクエストを作成します。

7. 競合が発生した状態になります。