Recently, I've started using the "-A" option to merge / diff3, so that when there's a merge conflict, I get the "ancestor" version as well as both changes. Not to overstate things, but I've found that this has completely transformed my experience resolving source code merge conflicts, as the information I have at hand is SO much more helpful. With regards to the diff3.c source code, I believe that the option that I really appreciate is "diff_2nd".
However, one thing I'd often still like to do is to ignore cases where there are identical changes made. That is, for a block of code, there's a difference between FILEC and FILE0, as well as between FILEC and FILE1, but the blocks in FILE0 and FILE1 are identical. When I use diff3 with "-A", this appears as a bracketed conflict, with the labelled blocks from FILEC and FILE1. I don't get the "|||||||" marker or the identical block from FILE0, so it's fairly easy to identify this case. But when resolving a merge, it still needs to be "cleaned up". It appears that diff3 supports a "-x" or "-X" option to select "overlap_only", which would ignore these non-overlapping changes. However, the code enforces that I cannot select "-A" with either "-x" or "-X", and "-A" appears the only way to select "diff_2nd", so that it outputs the version of the block from FILE2/FILEC. For example, I can pass "-m" and "-X", but then I will not get the block of code from FILEC, losing the information that I value so dearly. In summary, I believe what I'd really like is to display the merges file, bracketing the conflicting changes, NOT including when FILE0 and FILE1 made identical changes, but when there *IS* a conflicting change, I'd like to see FILE0, FILE1 *and* FILE2/FILEC. Is this possible? Thanks, Bob P.S. I apologize for all the terminology I may have used incorrectly...
