Allowing a branch with a name 'HEAD' could trigger ambiguity. We could avoid this by checking for it manually. Moreover this has been done partially in 8efb8899c ("branch: segfault fixes and validation", 2013-02-23) There was still a way to create a branch with name 'HEAD' by using $ git checkout -b HEAD Avoid such loop holes by 'strictly' checking for a branch with name HEAD. The check is referred to as strict because it's done in a place which is supposed to be called to ensure that a new branch name is a valid one. Signed-off-by: Kaartic Sivaraam <kaarticsivaraam91196@xxxxxxxxx> --- branch.c | 3 +++ builtin/branch.c | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/branch.c b/branch.c index 36541d05c..ea1050649 100644 --- a/branch.c +++ b/branch.c @@ -184,6 +184,9 @@ int validate_new_branchname(const char *name, struct strbuf *ref, if (strbuf_check_branch_ref(ref, name)) die(_("'%s' is not a valid branch name."), name); + if (!strcmp(name, "HEAD")) + die(_("it does not make sense to create 'HEAD' manually")); + if (!ref_exists(ref->buf)) return 0; else if (!force && !attr_only) diff --git a/builtin/branch.c b/builtin/branch.c index 16d391b40..c86348d4c 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -762,9 +762,6 @@ int cmd_branch(int argc, const char **argv, const char *prefix) int branch_existed = 0, remote_tracking = 0; struct strbuf buf = STRBUF_INIT; - if (!strcmp(argv[0], "HEAD")) - die(_("it does not make sense to create 'HEAD' manually")); - if (!branch) die(_("no such branch '%s'"), argv[0]); -- 2.14.1.1006.g90ad9a07c