MULTI
SET a 1
LPUSH a x
SET b 2
EXEC
a is 1 and b is 2; LPUSH returned a WRONGTYPE errorThe answer is "a is 1 and b is 2; LPUSH returned a WRONGTYPE error". LPUSH fails only when it runs, because by then a is a string. Redis puts that error in the LPUSH reply and still runs the other commands. There is no rollback, so "Nothing changed: the whole transaction rolled back" is wrong. Execution also does not stop at the error, so "a is 1 and b does not exist" is wrong. EXEC refuses the whole block only for errors found while queuing, such as a wrong number of arguments.