Merge branch 'rs/branch-allow-deleting-dangling'
"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
This commit is contained in:
commit
ec8d24f05d
@ -118,7 +118,8 @@ OPTIONS
|
|||||||
Reset <branchname> to <startpoint>, even if <branchname> exists
|
Reset <branchname> to <startpoint>, even if <branchname> exists
|
||||||
already. Without `-f`, 'git branch' refuses to change an existing branch.
|
already. Without `-f`, 'git branch' refuses to change an existing branch.
|
||||||
In combination with `-d` (or `--delete`), allow deleting the
|
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
|
`-m` (or `--move`), allow renaming the branch even if the new
|
||||||
branch name already exists, the same applies for `-c` (or `--copy`).
|
branch name already exists, the same applies for `-c` (or `--copy`).
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ static int check_branch_commit(const char *branchname, const char *refname,
|
|||||||
int kinds, int force)
|
int kinds, int force)
|
||||||
{
|
{
|
||||||
struct commit *rev = lookup_commit_reference(the_repository, oid);
|
struct commit *rev = lookup_commit_reference(the_repository, oid);
|
||||||
if (!rev) {
|
if (!force && !rev) {
|
||||||
error(_("Couldn't look up commit object for '%s'"), refname);
|
error(_("Couldn't look up commit object for '%s'"), refname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1272,6 +1272,19 @@ test_expect_success 'attempt to delete a branch merged to its base' '
|
|||||||
test_must_fail git branch -d my10
|
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' '
|
test_expect_success 'use --edit-description' '
|
||||||
write_script editor <<-\EOF &&
|
write_script editor <<-\EOF &&
|
||||||
echo "New contents" >"$1"
|
echo "New contents" >"$1"
|
||||||
|
Loading…
Reference in New Issue
Block a user