【问题标题】:IntelliJ - GIT delete local orphan branch in GUIIntelliJ - GIT 在 GUI 中删除本地孤立分支
【发布时间】:2016-07-21 15:38:20
【问题描述】:

我使用 IntelliJ (2016.1.3) 和 GIT 集成插件 (8.1)。 在使用 IntelliJ 期间,我检查了多个分支。现在这些分支已从 GIT 中删除(在每次拉取请求后我们删除它们)。

从现在开始,我签出的每个分支都出现在 Intellij 的 GIT 视图中(通过 VCS > Git > 分支...),请参阅:

有一种方法可以删除它们:这样做...一个接一个!但是如果有很多分支(比如说一百个......),它肯定会变得乏味......

问题是: 你知道是否有一种简单的方法可以在 IntelliJ 中从此视图中删除所有孤立的本地分支?

谢谢:)

编辑:我找到了一种删除它们的方法,但在另一个工具中:“Git Gui”。当您从那里删除它时,它也会在 IntelliJ 中被删除。并且可以一次删除多个分支。

【问题讨论】:

    标签: git intellij-idea


    【解决方案1】:

    远程跟踪分支很容易与普通 Git 分支混淆。远程跟踪分支以remotes/ 开头,如remotes/origin/branch1,尽管Git 允许您省略remotes/ 作为简写,因此您也可以将remotes/origin/branch1 简称为origin/branch1。但这些不是正常的分支。您不能承诺或直接检查它们。如果您尝试检查它们,Git 将检查分离的 HEAD,或者它会自动创建一个与远程分支同名的新本地分支,例如branch1。这个新的本地分支永远不会被删除,除非告诉 Git 明确删除它。

    正在发生的事情是双重的:

    1. 您需要确保 Git 正在修剪远程跟踪分支(remotes/origin/branch1 等)。默认情况下它不会。请参阅this question on pruning remote tracking branches 了解如何执行此操作。基本上是git fetch -p origingit remote prune origin

    2. 当您签出一个分支以处理它时,您创建了一个与 远程跟踪分支 同名的本地分支。本地分支branch1 永远不会被删除,除非您手动删除,即使远程跟踪分支remotes/origin/branch1 被修剪,如果branch1 在远程服务器上被删除。

    您可以使用git branch -d 手动清理这些分支(或使用-D 强制清理这些分支,如果分支从未合并,这可能是必要的),或者查看Remove old remote branches from Git 的答案以获得自动执行此操作的方法.

    【讨论】:

    • 感谢您的解释。但是我只是想找到一种方法来直接在 IntelliJ 中删除我的本地分支,而不是使用任何“命令行”工具:)
    • @GuillaumeM 我明白了...听起来您要么必须在 GUI 中手动执行此操作,要么使用命令行进行批量删除。
    • 我使用了git fetch -p origin,起初看起来该命令没有执行任何操作。但是一旦列表被刷新,旧的就消失了。我有 64 个在附近闲逛,所以一口气把它们全部清理干净真是太好了。另外,我不必引用远程存储库来确保我没有删除任何活动分支。
    【解决方案2】:

    Git 在 git 项目下的 .git 文件夹中跟踪其本地和远程存储库的详细信息。

    要删除本地孤立分支,请转到:

    .git -> refs -> 头(在这个位置你可以看到你所有的本地分支)

    然后删除不需要的分支。

    注意:如果您使用的是 mac os,请清除您的垃圾箱。

    这会一次性清除您当地的孤儿分支。

    【讨论】:

    • 这应该被标记为最佳答案,它让我可以轻松删除不需要的分支。我们也可以删除 refs/remotes/origin 中的 origin 分支
    • 三年后,这个解决方案仍然比尝试在 Intellij IDE afaik 中完成这个要好。公平地说,在方便之前我会接受很多改进。
    • VCS > Git > Branches >(单击分支名称右侧的小箭头,有时它会给您一个删除选项)。如果它不允许您删除分支,则删除 master 并返回并将分支重命名为 master。
    【解决方案3】:

    要使删除大量分支不那么痛苦,您可以转到 git 工具窗口(热键 Alt + 9)。在分支面板中可以选择多个分支并删除它们。

    因此您不必一一删除它们。但请注意不要删除仍然感兴趣的分支,因为您无法看到与远程分支的连接,或者在此视图中是否已删除。

    【讨论】:

      【解决方案4】:

      另一种删除本地git分支的方法,根据您的要求可能对您有所帮助:

      git branch -d branch1 branch2 branch3 branch4
      

      如果您从项目目录在终端上执行此命令,它将删除您通过的所有分支,即branch1 branch2 ... branch_n

      【讨论】:

      • 感谢您的回答。我认为这不是一个好方法,除非我可以轻松收集我想要删除的分支的所有名称。我只是想知道 IntelliJ 是否能够通过 GUI 做到这一点。
      • 收集名字的简单方法是运行'git branch --merged'
      【解决方案5】:

      Intellij-Plugin GitToolBox 提供了一个名为“Git 分支清理”的选项,它可以满足您的需要。

      安装后,转到 Git -> GitToolBox -> Git 分支清理并选择要删除的分支。

      【讨论】:

        【解决方案6】:

        我尝试了@Guillaume M 的更新答案,对我来说效果很好。我有很多本地分支(在我的 IntelliJ 上),因为它们的远程对应物被远程合并和删除,它们都松散了。在一段时间内没有进行任何内务处理,悬空的引用不断堆积。所以,基本上这些是不跟踪任何远程分支的孤儿。

        这是我为清理它们所做的 - 使用“Git Gui”删除孤立的本地分支并刷新/重新启动(虽然不是强制性的)IntelliJ。对于这种批量删除分支,Git gui 显得稍微方便一些。

        1. 启动“Git Gui”工具
        2. '打开现有存储库'。选择您正在使用 IntelliJ IDE 的存储库的路径。
        3. 在顶部菜单中,选择“分支”->“删除”
        4. 会出现一个弹出窗口,其中包含存储库中的所有本地分支。
        5. 选择要删除的所有本地分支,然后单击“删除”。您可以添加先决条件以防止任何意外删除。在我的情况下,它们都是松散的引用,没有真正了解它们被合并到其他分支。因此,我选择了“不执行合并检查”来继续操作,否则在先决条件下会失败。

        希望 IntelliJ 提供一个选项来自动管理这些分支。或者它已经存在,我想念它。无论如何,这种方法为我节省了一些时间。

        【讨论】:

          【解决方案7】:

          在项目目录中打开一个控制台并运行:

          git remote prune origin
          

          它会删除对远程存储库上不再存在的远程分支的任何本地引用origin

          如果不是origin,请将上面命令中的origin 替换为远程存储库的名称(本地存储库已知)。

          据我所知,使用 IntelliJ Git 插件无法实现这一目标。

          阅读更多:https://git-scm.com/docs/git-remote

          【讨论】:

          • 它在 IntelliJ 中没有任何作用:本地分支仍然存在。
          • 它在 IntelliJ IDEA 中确实没有做任何事情。它在存储库中。 IntelliJ 插件必须从底层 git 存储库中刷新其信息,并且它可能不会自行刷新。您可以打开“版本控制”视图(使用 Alt-9Cmd-9,具体取决于您的操作系统),转到其“日志”选项卡并按“刷新”按钮或只是重新启动 IntelliJ IDEA,它会在下次启动时刷新信息。
          • 问题是 pruning 只删除了 remote tracking branch(例如remotes/origin/branch1),而不是本地真正的分支branch1 Git 存储库。你需要这样做 git branch -D branch1 来做到这一点。有关详细信息,请参阅我的答案。
          • @ColinDBennett 看来我误解了这个问题。它说“孤儿本地分支”,我认为这是关于已删除远程分支的本地引用。在我看来,本地分支机构不能是“孤儿”。
          猜你喜欢
          • 2022-12-06
          • 1970-01-01
          • 2015-02-22
          • 2011-04-30
          • 2012-05-23
          • 1970-01-01
          • 2021-08-22
          • 2016-10-06
          • 2013-11-25
          相关资源
          最近更新 更多