Lines for code and structured text — it produces a familiar unified diff with line numbers. Words for prose, where a line-level diff marks a whole paragraph as changed when one word moved. Characters for short strings where you need to spot a single typo or a stray invisible character.
Why does everything show as changed?
Usually line endings or trailing whitespace. A file saved on Windows uses CRLF and one from Unix uses LF, which makes every line differ invisibly. "Ignore trailing whitespace" is on by default to catch the common case; enable "ignore whitespace differences" for the rest.
Is there a size limit?
No hard cap, but diffing is more expensive than it looks — the underlying algorithm is roughly O(n×d) in the size of the input and the number of differences. Documents of a few thousand lines are comfortable; for anything much larger, a local diff tool will be faster.