**Summary**
For git dependencies, the branch/tag resolution does not always work as expected.
Refactor the code to make the resolution algorithm more explicit and follow discussions in #3720.
**Test plan**
New test in `__tests__/util/git-ref-resolver.js`.
Also, benefit from the fact that Travis CI ran the test with an older Git version. I don't know if we have a minimum git version requirement, it seems we currently don't test against any specific version.
**Implementation details**
I refactored `parseRefs` to return the full ref name, so we can differentiate branches and tags.
I use `git ls-remote --symref` to get the default branch name. This works only in recent versions of git (thanks Travis CI for reporting the issue), so I fall back to another algorithm if `--symref` is unavailable.
I tried not to use the variable name `hash`, which is confusing between the git-url hash and the commit hash.