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. West, A. Paranjape, and J. Leskovec. Proceedings of the 24th International Conference on World Wide Web, page 1242--1252. Republic and Canton of Geneva, Switzerland, International World Wide Web Conferences Steering Committee, (2015)
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)