summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamkumar Ramachandra <artagnon@gmail.com>2013-05-30 00:51:50 +0530
committerJunio C Hamano <gitster@pobox.com>2013-05-29 15:34:04 -0700
commit7b2ecd81084adeba701c60da81eec6be478910b8 (patch)
tree7fda9bb6955ec7f7898520934468dbae03b6f2c1
parent35ee69c0f6c77f293b66125d334467d9692ef866 (diff)
downloadgit-7b2ecd81084adeba701c60da81eec6be478910b8.tar.gz
push: fail early with detached HEAD and current
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>
-rw-r--r--builtin/push.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/builtin/push.c b/builtin/push.c
index ef3aa970ce..ba2bd56ebc 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -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:
@@ -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;