Skip to content

Commit

Permalink
push: fail early with detached HEAD and current
Browse files Browse the repository at this point in the history
Setting push.default to current adds the refspec "HEAD" for the
transport layer to handle.  If "HEAD" doesn't resolve to a branch (and
since no refspec rhs is specified), the push fails after some time with
a cryptic error message:

  $ git push
  error: unable to push to unqualified destination: HEAD
  The destination refspec neither matches an existing ref on the remote nor
  begins with refs/, and we are unable to guess a prefix based on the source ref.
  error: failed to push some refs to 'git@github.com:artagnon/git'

Fail early with a nicer error message:

  $ git push
  fatal: You are not currently on a branch.
  To push the history leading to the current (detached HEAD)
  state now, use

    git push ram HEAD:<name-of-remote-branch>

Just like in the upstream and simple cases.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Ramkumar Ramachandra authored and Junio C Hamano committed May 29, 2013
1 parent 35ee69c commit 7b2ecd8
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions builtin/push.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ static void warn_unspecified_push_default_configuration(void)

static void setup_default_push_refspecs(struct remote *remote)
{
struct branch *branch;

switch (push_default) {
default:
case PUSH_DEFAULT_UNSPECIFIED:
Expand All @@ -194,6 +196,9 @@ static void setup_default_push_refspecs(struct remote *remote)
break;

case PUSH_DEFAULT_CURRENT:
branch = branch_get(NULL);
if (!branch)
die(_(message_detached_head_die), remote->name);
add_refspec("HEAD");
break;

Expand Down

0 comments on commit 7b2ecd8

Please sign in to comment.