On Fri, Mar 25, 2016 at 1:58 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > I thought these are clear from their documentation. "push" works on > refnames, "branch" works on branch names. "push" takes an branch > name as a short-hand and adds refs/heads/ when it makes sense, but > because it does not make any sense for "git branch" to create a > "branch" in a random place in refs/ (e.g. "refs/tags/foo" is not a > branch), it takes "foo" (i.e. the name of the branch, whose > underlying ref is "refs/heads/foo"). > > So > > ref=$(git rev-parse --symbolic-full-name "$2") && > case "$ref" in > '') echo >&2 "No such thing $2"; exit 1 ;; > refs/heads/*) ref=${ref#refs/heads/} ;; > *) echo >&2 "That's not a branch $2"; exit 2 ;; > esac && > git push "$1" "refs/heads/$ref" && > git branch -D "$ref" > > or something? Reading the git documentation feels a lot like reading the C++ standard. Not the best place to go to learn something. Some of the terminology is very detail-oriented. For example, until you explained the differences between push & branch, I always thought "ref" and "branch" were interchangeable. But now it's clear to me that a branch is just a type of ref, but refs are not branches. Also as a Windows developer, I am not as well-versed in bash scripting as I'd like to be. So thanks for your explanation, it is clear now. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html