They can do the same thing : Fourier transform, but fft2 is only for 2D matrix, and fft can be used for any dimension. Actually fft2 uses the fft command if you read the source code of fft2.m :
function f = fft2(x, mrows, ncols)
if ismatrix(x)
if nargin==1
f = fftn(x);
else
f = fftn(x,[mrows ncols]);
end
else
if nargin==1
f = fft(fft(x,[],2),[],1);
else
f = fft(fft(x,ncols,2),mrows,1);
end
end
so the difference is fft can do what fft2 can, but for image data fft2 is more convenient.