Okay I checked more and found that `symbolic-ref` does not always work as I expected while writing previous comment. 
with `git symbolic-ref` if I provide some thing not prefixed with **refs/heads/** then it fails, and if I provide **refs/heads/some-crap** then it updates the HEAD (where "some-crap" is not a valid branch head).

But on the other hand "show-ref" works fine for with and without prefix case. So I guess if we want stricter checking then we should use `show-ref` also.