使用Git删除本地分支

时间:2017-01-05 18:35:24

标签: git

我用谷歌搜索了这个主题有几个非常长的主题,但似乎没有一个帮助。我想我做错了什么。 我有一个名为Test_Branch的分支。当我尝试使用推荐方法删除它时,我收到以下错误:

  

无法删除在'[目录中]检出的分支'Test_Branch'   位置]”。

除此之外,我没有得到任何其他信息。我可以轻松地吹走远程分支,但本地分支不会消失。

9 个答案:

答案 0 :(得分:145)

切换到其他分支并删除Test_Branch,如下所示:

$ git checkout master
$ git branch -d Test_Branch

如果上面的命令导致错误 - The branch 'Test_Branch' is not fully merged. If you are sure you want to delete it并且您仍想将其删除,那么您可以强制使用-D而不是-d 删除它,为:

$ git branch -D Test_Branch

要从远程删除Test_Branch,请执行:

git push origin --delete Test_Branch

答案 1 :(得分:18)

您可能已经签出了Test_Branch,并且当它是您当前的分支时,您可能无法将其删除。检查一个不同的分支,然后尝试删除Test_Branch。

答案 2 :(得分:12)

今天进入这个并切换到另一个分支并没有帮助。事实证明,我的工作树信息已经损坏,并且有一个工作树,其工作目录与我的工作目录相同,HEAD指向分支(git worktree list)。我删除了引用它并.git/worktree/工作的git branch -d文件夹。

答案 3 :(得分:3)

如果您使用git worktree创建了多个工作树,则在删除分支之前,您需要运行git prune

答案 4 :(得分:1)

这对我有用...
我已经删除了.git / worktrees文件夹中的文件夹,然后尝试了“ git delete -D分支名称”。

答案 5 :(得分:0)

就像其他人提到的那样,您不能删除您正在工作的当前分支。

就我而言,我在 Visual Studio 中选择了“ Test_Branch”,并试图从Sourcetree(Git GUI)中删除“ Test_Branch”。并出现以下错误消息。

  

无法删除在“ [目录”中签出的分支“ Test_Branch”   位置]”。

切换到 Visual Studio 中的其他分支,并能够从Sourcetree中删除“ Test_Branch”。

我希望这对使用 Visual Studio Sourcetree 的人有所帮助。

答案 6 :(得分:0)

在我的情况下,与前一个分支有关的更改尚未落实。我使用了以下命令,然后删除了。

git checkout *

git checkout master

git分支-D

答案 7 :(得分:0)

今天遇到了 git branch -a 报告的分支的这个问题,看起来像这样一个:remotes/coolsnake/dev,即注册的 git remote add ... 远程中对“远程”分支的本地引用。

当你尝试

git branch -d remotes/coolsnake/dev

您将获得 error: branch 'remotes/coolsnake/dev' not found

神奇的是在这里记住这些是引用并且必须通过

删除
git update-ref -d remotes/coolsnake/dev

(根据 https://superuser.com/questions/283309/how-to-delete-the-git-reference-refs-original-refs-heads-master/351085#351085

花了一段时间才发现我的错误,只有 TortoiseGit 可以做到这一点,当我陷入困境时才使我走上了正确的道路。尽管有几种不同的方法,谷歌没有提供任何有用的东西。 (不,我已经找到了我需要的东西,还有 git: How to delete a local ref branch?,它没有出现,因为我忘记了关于这些分支是 references 的 'ref' 位。)

希望这有助于其他人在与我在同一条船上时摆脱困境,尝试过滤/有选择地删除存储库中的分支,其中一些分支由于之前的 git remote add 命令而存在。

>

在 shell 脚本中,这可能如下所示:

#! /bin/bash
#
# Remove GNU/cesanta branches so we cannot accidentally merge or cherrypick from them!
# 

# commit hash is first GNU commit
R=218428662e6f8d30a83cf8a89f531553f1156d25

for f in $( git tag -l ; git branch -a ) ; do 
    echo "$f"
    X=$(git merge-base $R "$f" ) 
    #echo "X=[$X]" 
    if test "$X" = "$R" ; then 
        echo GNU 
        git branch -D "$f" 
        git update-ref -d "refs/$f" 
        git tag -d "$f" 
        #git push origin --delete "$f" 
    else 
        echo CIVETWEB 
    fi
done

答案 8 :(得分:0)

大多数初级程序员所面临的

Cannot delete branch 'my-branch-name'

因为他们已经在那个分支上。

删除您已经在处理的分支是不合逻辑的。

只需切换到另一个分支,如 masterdev,然后删除您想要的分支:

git checkout dev

git branch -d my-branch-name

没有force delete,你可以删除那个分支