Skip to content

Commit

Permalink
git-branch -D: make it work even when on a yet-to-be-born branch
Browse files Browse the repository at this point in the history
This makes "git branch -D other_branch" work even when HEAD
points at a yet-to-be-born branch.

Earlier, we checked the HEAD ref for the purpose of "subset"
check even when the deletion was forced (i.e. not -d but -D).
Because of this, you cannot delete a branch even with -D while
on a yet-to-be-born branch.

With this change, the following sequence that now works:

	mkdir newdir && cd newdir
	git init-db
	git fetch -k $other_repo refs/heads/master:refs/heads/othre
	# oops, typo
	git branch other othre
	git branch -D othre

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 25, 2006
1 parent 75e6e21 commit 67affd5
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions builtin-branch.c
Expand Up @@ -38,12 +38,16 @@ static int in_merge_bases(const unsigned char *sha1,

static void delete_branches(int argc, const char **argv, int force)
{
struct commit *rev, *head_rev;
struct commit *rev, *head_rev = head_rev;
unsigned char sha1[20];
char *name;
int i;

head_rev = lookup_commit_reference(head_sha1);
if (!force) {
head_rev = lookup_commit_reference(head_sha1);
if (!head_rev)
die("Couldn't look up commit object for HEAD");
}
for (i = 0; i < argc; i++) {
if (!strcmp(head, argv[i]))
die("Cannot delete the branch you are currently on.");
Expand All @@ -53,8 +57,8 @@ static void delete_branches(int argc, const char **argv, int force)
die("Branch '%s' not found.", argv[i]);

rev = lookup_commit_reference(sha1);
if (!rev || !head_rev)
die("Couldn't look up commit objects.");
if (!rev)
die("Couldn't look up commit object for '%s'", name);

/* This checks whether the merge bases of branch and
* HEAD contains branch -- which means that the HEAD
Expand Down

0 comments on commit 67affd5

Please sign in to comment.