зеркало из https://github.com/microsoft/git.git
branch: allow deleting dangling branches with --force
git branch only allows deleting branches that point to valid commits. Skip that check if --force is given, as the caller is indicating with it that they know what they are doing and accept the consequences. This allows deleting dangling branches, which previously had to be reset to a valid start-point using --force first. Reported-by: Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
225bc32a98
Коммит
597a977489
|
@ -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"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче