Mathias Kunter wrote: > However, the advised "git push <name>" command won't work on that branch > with the default settings of Git. To make it work, `simple` pushing > would have to use `current` behavior on a branch without upstream. > > Please consider changing that. Thank you. OK, after reorganizing the code to actually make it understandable [1], I ended up with this: if (centralized) { if (!branch->merge_nr || !branch->merge || !branch->remote_name) die(_("The current branch %s has no upstream branch.\n" "To push the current branch and set the remote as upstream, use\n" "\n" " git push --set-upstream %s %s\n"), branch->name, remote->name, branch->name); if (branch->merge_nr != 1) die(_("The current branch %s has multiple upstream branches, " "refusing to push."), branch->name); /* Additional safety */ if (strcmp(branch->refname, branch->merge[0]->src)) die_push_simple(branch, remote); } refspec_appendf(&rs, "%s:%s", branch->refname, branch->refname); I agree this doesn't make sense. If this works: git clone $central . ... git push Then this should too: git clone $central . git checkout -b fix-1 ... git push Cloning automatically sets up an upstream branch for "master", and therore it passes the safety check of `push.default=simple`, and that is much more dangerous than pushing any other branch. Why do we barf with "fix-1", but not "master"? Doesn't make sense. This is what we want: if (centralized && (branch->merge_nr && branch->merge && branch->remote_name)) { if (branch->merge_nr != 1) die(_("The current branch %s has multiple upstream branches, " "refusing to push."), branch->name); /* Additional safety */ if (strcmp(branch->refname, branch->merge[0]->src)) die_push_simple(branch, remote); } refspec_appendf(&rs, "%s:%s", branch->refname, branch->refname); In other words: `simple` should be the same as `current`, except when there's an upstream branch configured *and* the destination branch has a different name. Cheers. [1] https://lore.kernel.org/git/20210528201014.2175179-1-felipe.contreras@xxxxxxxxx/ -- Felipe Contreras