I have a list of pull requests on github. I can fetch the pull requests like this:
git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
I get
Check out what's available to checkout with
git branch -a
The first command (git checkout refs/pull/1/head) didn't work because refs/pull/1/head is the name of the reference in the remote repository. You don't have a reference with that name in your local repository because your fetch refspec translated it to refs/remotes/origin/pr/1/head.
The second command (git checkout origin/pr/1/head) should have worked, although it should have given you a "detached HEAD" warning. Was there a typo that you fixed when posting your question to Stack Overflow?
Your fetch refspec told git to translate the remote references into local references in the refs/remotes directory. The references in that directory are treated specially -- they're "remote references" meant to indicate the state of the remote repository the last time you did a fetch. Normally you don't want to check those refs out directly -- you want to create a local branch that is configured to "follow" or "track" the remote reference (which enables special convenience shortcuts such as the @{u} revision parameter and easier push/pull usage).
Try:
git fetch origin +refs/pull/*:refs/remotes/origin/pr/*
git checkout -b whatever-branch-name-you-want origin/pr/1/head
The above creates a new local branch called whatever-branch-name-you-want (I recommend calling it pr/1/head) pointing at the same commit as origin/pr/1/head, configures whatever-branch-name-you-want to track origin/pr/1/head, then switches to the new branch.