最近、Git の自動マージで奇妙な問題が発生しました。私 (および私の同僚の 1 人) はトピック ブランチでコミットしますが、それをマスター ブランチとマージしようとすると、Git はマスター ブランチで変更されたほとんどすべてのファイルを自動マージできず、競合を手動で解決する必要があります。これを mergetool で実行すると、ファイルに競合は表示されず、トピック ブランチのファイルは「ベース」ファイルと同じように見えます。そのため、解決は高速ですが、ファイル数が多い場合は依然として面倒です。今日、そのようなマージ (「競合」としてマークされたファイルが 10 個を超える) を 1 回経験しましたが、競合するファイルがさらに多くなっています。また、 master をトピック ブランチにマージしようとしましたが、結果は同じでした。
Eclipse は実際には一時ブランチ内の競合するファイルのコミットを表示しますが、そのコミットのファイルをこのコミットの親と比較すると、このファイルには変更が加えられていません。変更が表示されるコミットは、同僚が作成したマージ コミットにあります (ただし、競合するファイルのリストなどには表示されません)。正直に言うと、私の同僚がこれらのファイルを開くとは思えません。なぜなら、これらのファイルは、彼が取り組んでいることとは何の関係もないからです (そして、それが彼の言うことです)。
その行動の理由と、これを止める方法は何ですか? 私が考えられる唯一のことは、mergetool または Eclipse の diff には表示されないが、Git には関係するいくつかのエンコードの問題です。
編集:ブランチのマージコミットとその親コミットの間の差分を確認しましたが、実際に問題はエンドラインが原因でした(git diffはEclipseの比較以上のものを示しました)。マージ コミットにより、CRLF が LF に置き換えられました。それは実際に起こるべきことでした(git configでcore.autocrlfをtrueに設定しています)が、他の従業員の1人がCRLFエンドラインでコミットしました(彼はリポジトリでcore.autocrlfをfalseに設定していましたが、その理由がわかりませんでした)そのように設定されていました)。