I swear I tried to read documentations, but in practice, I could not tell the difference. I feel they are doing the same thing. I can turn both modes on, but I am not sure in what circumstance I need to do so.
If you are continuously typing text without making mistakes or editing, then the end result would be the same in both cases.
auto-fill-mode isn't so helpful when editing existing text, though (especially so when editing text which has already been filled). It is just inserting line breaks when the current column exceeds the fill column, but if you are editing before the fill column, it does nothing; and it doesn't care about the preceding lines at all. You would probably need to invoke
fill-paragraph manually from time to time.
refill-mode OTOH will automatically refill the current paragraph as you edit, and will still trigger when you are before the fill-column.
Just experiment with both -- you'll see the difference pretty quickly.
refill-mode does more than
auto-fill-mode, and does it automatically.
This may be what you prefer but there are situations where
refill-mode is not convenient. E.g., when you edit text shared with others via some version control system like
git and what you edit really is some source code for the final text, e.g., when you are writing in LaTeX. The version control systems compare versions line by line and refilling automatically creates a lot of unintended differences that will clutter the communication between co-authors. This is why I use
auto-fill-mode a lot, and
refill-mode very rarely.
M-x auto-fill-mode inserts newlines as you keep inserting characters.
M-x refill-mode goes a step further, it triggers on all kinds of changes, including deletion of text (and undoes filling if possible).