こう 聞かれます
- 「コンフリクトが
起きたら、 どう 直しますか」 - 「コンフリクトは
なぜ 起きるのですか」 - 「チームで
コンフリクトを 減ら すために、 何か 工夫していますか」
面接官が 見ている点
- コンフリクトを
「壊れた」ではなく、 Git が 人に 判断を 求めている 状態だと 分かっているか - 印の
意味を 読み、 どちらを 残すかを 自分だけで 決めず、 書いた 人と話せるか - 直した
あとに 動かして 確かめてから コミットする、という 最後の 一手を言えるか
短い答え
- 2 つの
ブランチで 同じ所を 別々に 直すと、 Git が どちらを 残すか 決められず、 コンフリクトに なります。 - ファイルに
入った 印を 読み、 残す形に 書き直して 印を 消し、 git add してから コミットで 取り込みを 終えます。 - どちらを
残すか 迷う ときは 書いた 人と 話し、 直した あとは テストや 画面で 動きを 確かめます。
少し 詳しい答え
わざと 起こして印を読む
main と feature の
ターミナル
git init -q -b main demo
cd demo
git config user.name Aya
git config user.email a@x.jp
echo "色は青" > color.txt
git add color.txt
git commit -q -m "最初の色"
git switch -q -c feature
echo "色は緑" > color.txt
git commit -q -am "緑にする"
git switch -q main
echo "色は赤" > color.txt
git commit -q -am "赤にする"
git merge feature
git status --short
cat color.txt
echo "色は緑" > color.txt
git add color.txt
git commit -q --no-edit
git log --format=%sAuto-merging color.txt
CONFLICT (content): Merge conflict in color.txt
Automatic merge failed; fix conflicts and then commit the result.
UU color.txt
<<<<<<< HEAD
色は赤
=======
色は緑
>>>>>>> feature
Merge branch 'feature'
赤にする
緑にする
最初の色UU は、<<<<<<< HEAD から ======= までが======= から >>>>>>> feature までが
直すときの手順
git statusで、どの ファイルが 止まっているかを見る - 印の
上下を 読み、 どちらを 残すか、 両方を 合わせるかを 決める。 意図が 分からなければ、 その 行を 書いた人に聞く - 印を
全部消して 保存し、 add して コミットする - アプリを
動かし、 テストを 回して、 合わせた 結果が 壊れていないかを確かめる
途中でgit merge --abort で
作った
よく ある間違い
- 「コンフリクトは Git の
不具合」と言う 同じ 所が 別々に 直されたので、 人に 決めて もらう ために 止まっているだけです - 自分の
側だけを 残して終える 相手の 直しを 黙って 消すと、 その機能が 壊れます。 迷ったら 書いた 人に 確かめます - 印を
消したら、 すぐ push する 文としては 正しくても、 合わせた 結果が 動くとは 限りません。 動かして テストを 回してから出します
深掘りの問い
- 「コンフリクトを
減らすには、 どうしますか」 ブランチを 小さく 短く 保ち、 こまめに main を 取り込む、と 答えます。 同じ ファイルを 触る 作業は チームで 声を かけ合う、 とも添えます - 「離れた
行を 直した 場合も、 コンフリクトに なりますか」 別々の 行の 直しなら、 多くの 場合 Git が 自動で 両方を 残す、と答えます - 「取り込みの
途中で、 やめたくなったら」 git merge --abortで取り込む前の 状態に 戻せる、と答えます