"git remote rm <repo>" is happy to remove non-remote branches (and their reflogs). This may be okay if the repository truely is a mirror, but if the user had done "git remote add --mirror <repo>" by accident and was just undoing their mistake, then they are left in a situation that is difficult to recover from. After this commit, "git remote rm" skips over non-remote branches and instead advises the user on how to remove such branches using "git branch -d", which itself has nice safety checks wrt to branch removal lacking from "git remote rm". Signed-off-by: Jay Soffian <jaysoffian@xxxxxxxxx> --- On Sun, Feb 1, 2009 at 9:52 AM, Jay Soffian <jaysoffian@xxxxxxxxx> wrote: > Anyway, it would seem to me it should be harder to remove local refs. > This one was somewhat painful to recover from. Not sure what better > behavior would be: should it be harder to do "remote add --mirror" on > a repository with content, should "remote rm" on mirrored repository > require a --force switch with a stern warning first, or...? Perhaps something like this? builtin-remote.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/builtin-remote.c b/builtin-remote.c index abc8dd8..2629bc5 100644 --- a/builtin-remote.c +++ b/builtin-remote.c @@ -310,6 +310,13 @@ static int add_branch_for_removal(const char *refname, struct string_list_item *item; struct known_remote *kr; + /* don't delete non-remote branches */ + if (prefixcmp(refname, "refs/remotes")) { + warning("not removing non-remote branch; use git branch -d %s to remove", + abbrev_branch(refname)); + return 0; + } + memset(&refspec, 0, sizeof(refspec)); refspec.dst = (char *)refname; if (remote_find_tracking(branches->remote, &refspec)) -- 1.6.1.224.gb56c -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html