Git,マージする際のコンフリクトを解消する.

ブランチ(new-featuer)に変更を加えて,その後しばらく放置してmainブランチに幾つか他の変更を加えると,new-featureとmainとの間にコンフリクト(双方に同じところに差分を発生させてしまっている状態)が発生します.

VS-Codeだとコンフリクトが発生している場合は,Current ChangeとIncoming Changeを比較しながらコンフリクトを解消していくことになりますが,例えばScssから出力されたCssをトレースしている場合,場合によっては一行に巨大なコンフリクトが発生してしまって

Tokenization is skipped for long lines for performance reasons. The length of a long line can be configured via `editor.maxTokenizationLineLength`.

といったエラーが出たりします.

予めどちらのブランチの変更を取り入れるかを決めている場合は,コマンドラインからコンフリクトを解消してしまった方が早いです. コンフリクトしているファイルをconflicted.cssとします.コンフリクトしているファイルの一覧は

 $ git diff --name-only --diff-filter=U
conflicted.css

で確認できます.

このコンフリクトを解消する際には

 $ git checkout --ours conflicted.css // Currentの方を取り入れる
 $ git checkout --theirs conflicted.css // Incomingの方を取り入れる

とすると良いです.

こういったケースではsassのコンフリクトだけ解消してCssをビルドし直した方がいいかもしれませんが,大量のコンフリクトが発生していて取り入れる方針が立っている際にいちいちエディタを開かなくて良くて有用かと思います.