ref~ is shorthand for ref~1 and means the commit's first parent. ref~2 means the commit's first parent's first parent. ref~3 means the commit's first parent's first parent's first parent. And so on.
ref^ is shorthand for ref^1 and means the commit's first parent. But where the two differ is that ref^2 means the commit's second parent (remember, commits can have two parents when they are a merge).
R. Farzan, and P. Brusilovsky. Adaptive Hypermedia and Adaptive Web-Based Systems: 4th International Conference, AH 2006, volume 4018 of Lecture Notes in Computer Science, page 91--100. Berlin, Springer Verlag, (2006)