As suggested by ToddR, here is the only answer that actually works on maybe most flavours of Linux - definately Ubuntu - which uses ln from coreutils package). Let me prove it to you.
matthewh@xen:~$ mkdir -p releases/dirA
matthewh@xen:~$ mkdir -p releases/dirB
matthewh@xen:~$ ln -s releases/dirA
matthewh@xen:~$ ls -l dirA
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:58 dirA -> releases/dirA
matthewh@xen:~$ ln -sf releases/dirB
matthewh@xen:~$ rm dirA
matthewh@xen:~$ ln -s releases/dirA current
matthewh@xen:~$ ln -sf releases/dirB current
matthewh@xen:~$ ls -l current
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:59 current -> releases/dirA <--- DOESN'T WORK!
matthewh@xen:~$ ln -sfn releases/dirB current <--- WORKS!
matthewh@xen:~$ ls -l current
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:59 current -> releases/dirB
So the correct method on Linux is:
ln -sfn source target
-n, --no-dereference
treat LINK_NAME as a normal file if it is a symbolic link to a directory
This is essential, if you do not use -n switch you will end up with a symlink inside source directory named "target".
In my examples,
matthewh@xen:~$ ls -l releases/dirA/
total 0
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 10:03 dirB -> releases/dirB