threads / discuss / 55197

What does `git push origin --delete ""` do?

Subject: What does `git push origin --delete ""` do?

## tl;dr

2 messages between Feb 23, 2021 and Feb 23, 2021.

replies: 1people: 2as markdown or json

Tilman Vogel· Feb 23, 2021, 21:50 UTC · lore
Hi!
Because of an empty line in the input file, my script
cat remove.txt | sed 's/origin\///' | xargs -d '\n' git push origin --delete

executed (among other deletions) an implicit `git push origin --delete ""`. I wonder, what that one is supposed to do. I think, it should produce an error just as `git push origin --delete` without a further argument does but it doesn't. It seemed like instead, it tried to push all my local branches to origin!? Is this something that should get fixed?

Best regards,
Tilman
Junio C Hamano· Feb 23, 2021, 22:46 UTC · re: Tilman Vogel · lore

Re: What does `git push origin --delete ""` do?

Tilman Vogel <tilman.vogel@web.de> writes:
Show 6 quoted lines
> Because of an empty line in the input file, my script
>
> cat remove.txt | sed 's/origin\///' | xargs -d '\n' git push origin --delete
>
> executed (among other deletions) an implicit `git push origin --delete
> ""`. I wonder, what that one is supposed to do.

It is supposed to error out, but incorrectly and silently turns itself into a "matching push".

This should fix it, I think (not even compiled tested).
 builtin/push.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git c/builtin/push.c w/builtin/push.c
index 03adb58602..194967ed79 100644
--- c/builtin/push.c
+++ w/builtin/push.c
@@ -115,7 +115,7 @@ static void set_refspecs(const char **refs, int nr, const char *repo)
 			else
 				refspec_appendf(&rs, "refs/tags/%s", ref);
 		} else if (deleterefs) {
-			if (strchr(ref, ':'))
+			if (strchr(ref, ':') || !*ref)
 				die(_("--delete only accepts plain target ref names"));
 			refspec_appendf(&rs, ":%s", ref);
 		} else if (!strchr(ref, ':')) {

← back to recent threads