Browse Source

Merge branch 'rs/branch-allow-deleting-dangling' into maint

"git branch -D <branch>" used to refuse to remove a broken branch
ref that points at a missing commit, which has been corrected.

* rs/branch-allow-deleting-dangling:
  branch: allow deleting dangling branches with --force
maint
Junio C Hamano 3 years ago
parent
commit
474e4f9b55
  1. 3
      Documentation/git-branch.txt
  2. 2
      builtin/branch.c
  3. 13
      t/t3200-branch.sh

3
Documentation/git-branch.txt

@ -118,7 +118,8 @@ OPTIONS @@ -118,7 +118,8 @@ OPTIONS
Reset <branchname> to <startpoint>, even if <branchname> exists
already. Without `-f`, 'git branch' refuses to change an existing branch.
In combination with `-d` (or `--delete`), allow deleting the
branch irrespective of its merged status. In combination with
branch irrespective of its merged status, or whether it even
points to a valid commit. In combination with
`-m` (or `--move`), allow renaming the branch even if the new
branch name already exists, the same applies for `-c` (or `--copy`).


2
builtin/branch.c

@ -168,7 +168,7 @@ static int check_branch_commit(const char *branchname, const char *refname, @@ -168,7 +168,7 @@ static int check_branch_commit(const char *branchname, const char *refname,
int kinds, int force)
{
struct commit *rev = lookup_commit_reference(the_repository, oid);
if (!rev) {
if (!force && !rev) {
error(_("Couldn't look up commit object for '%s'"), refname);
return -1;
}

13
t/t3200-branch.sh

@ -1272,6 +1272,19 @@ test_expect_success 'attempt to delete a branch merged to its base' ' @@ -1272,6 +1272,19 @@ test_expect_success 'attempt to delete a branch merged to its base' '
test_must_fail git branch -d my10
'

test_expect_success 'branch --delete --force removes dangling branch' '
git checkout main &&
test_commit unstable &&
hash=$(git rev-parse HEAD) &&
objpath=$(echo $hash | sed -e "s|^..|.git/objects/&/|") &&
git branch --no-track dangling &&
mv $objpath $objpath.x &&
test_when_finished "mv $objpath.x $objpath" &&
git branch --delete --force dangling &&
git for-each-ref refs/heads/dangling >actual &&
test_must_be_empty actual
'

test_expect_success 'use --edit-description' '
write_script editor <<-\EOF &&
echo "New contents" >"$1"

Loading…
Cancel
Save