It seems to be a bug in FileMerge. Curiously, it is only present in the GUI-launched version. If you run:
opendiff /path/to/file1 /path/to/file2 -merge /path/to/mergedfile
then it works fine. Personally, I only run this via the command line. I have a little wrapper script that does this:
#!/bin/sh
# Get a hold of the last parameter.
eval LAST=\${$#}
# Now run opendiff with the previous version and the current version.
opendiff ${*} -merge "$LAST"
Don't tell Apple, but I use this too 🙂
#!/bin/bash
# Delete any old files.
rm -Rf /tmp/cvsdiff_*
mkdir -p /tmp/cvsdiff_$$
# Do the diff.
cvs diff ${*} > /tmp/cvsdiff_$$/patch
# Get a hold of the last parameter.
eval LAST=\${$#}
# Copy the file to /tmp, append the process ID, and .cvsdiff to the file name.
mkdir -p /tmp/cvsdiff_$$/$LAST
rm -Rf /tmp/cvsdiff_$$/$LAST
cp "$LAST" "/tmp/cvsdiff_$$/$LAST"
# Now patch the temp file to the previous version.
patch -s -R "/tmp/cvsdiff_$$/$LAST" < /tmp/cvsdiff_$$/patch
# Now run opendiff with the previous version and the current version.
opendiff "/tmp/cvsdiff_$$/$LAST" "$LAST" -merge "$LAST"