Leonid, I think, was cautioning against using ClearAll[] alone in hopes that this would clear all definitions and provide a "clean slate". The closest equivalent to that might be ClearAll["Global`*"], although that still only clears user-generated definitions and not those in other contexts. Or you could use Quit[] or the menu entries to quit the currently running kernel and start afresh, for a more thorough cleanup that will forget all transient definitions, including packages loaded, modifications to other contexts, et cetera.
In other words: ClearAll is a "more powerful" version of Clear, but it still works only for the specific symbol(s) provided in its input. It does not, perhaps confusingly, "clear all symbols" in the session. Instead, it "clears all properties" of a given symbol.
It may be worth mentioning, for completeness, that Clear clear values of symbols, but it does not clear attributes, messages, or defaults associated with them; ClearAll clears those as well. You may also be interested in the discussion in Good clearing practices on this forum.
f[x_] := x^2andg[x_] := x^3, and then evaluateClearAll[f], thenf's definitions are cleared, butg's definitions are left untouched. – J. M.'s missing motivation Jul 25 '22 at 14:09