【问题标题】:Git - how to remove branch from checkout autocompleteGit - 如何从结帐自动完成中删除分支
【发布时间】:2014-04-04 13:24:11
【问题描述】:

我已经通过git branch -d branchname删除了一些本地分支,但它们仍然存在于自动完成中(当我输入git checkout,然后按tab键,我会在列表中看到所有已删除的分支)。

我尝试制作git gcgit prune,但没有任何改变。

【问题讨论】:

  • 您是否尝试过提交和推送您的更改?你可以试试git branch -D the_local_branch。但小心点。即使没有合并,这也会删除分支。

标签: linux git terminal


【解决方案1】:

我意识到这真的非常老了,但我刚刚遇到了这个问题,就我而言,我已经修剪了 origin 中的分支,但没有修剪 origin-http 中的分支。

我通常不使用 http 进行克隆,所以这通常不是问题,但是...welp。

一旦我做了git remote prune origin-http,它就为我解决了问题。

【讨论】:

    【解决方案2】:

    请注意,在 Git 2.13(2017 年第二季度)中推送分支删除 (git push origin :branchname) 更容易,因为完成脚本学会了完成“git push --delete b<TAB>”(完成要删除的分支名称)。

    参见Ævar Arnfjörð Bjarmason (avar)commit 723c1d5(2017 年 4 月 22 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit f70b541,2017 年 4 月 26 日)

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,以前的解决方案对我不起作用。事实证明,我在 repo 中有一个与旧的已删除分支同名的标签。您可以使用以下命令删除标签:

      git tag -d [tagname]

      远程删除:

      git push origin :refs/tags/[tagname]

      感谢https://nathanhoad.net/how-to-delete-a-remote-git-tag

      【讨论】:

        【解决方案4】:

        TL;DR - 真正的答案:

        $ git remote prune origin
        

        更多细节:

        如果 foo-branch 没有合并到您当前的分支中,git branch -d foo-branch 将无法删除。

        如果它们已经被合并,清理远程上的旧分支也是一个好主意。您可以通过git push origin :foo-branch 从命令行执行此操作。

        但是,旧的“幻影”分支 foo-branch 将继续用于自动完成 git checkout。显然 git 正在缓存远程可用的分支。通过调用:

        $ git remote prune origin
        

        您可以清除 git 远程可用分支的本地缓存。

        我可以在 OSX 上重现 git 2.2.1(可能还有早期版本)的 OP 问题。

        【讨论】:

          【解决方案5】:

          如果您确定不想要该分支,则可以将其从本地远程删除,如下所示:

          $ git branch -D branchname
          $ git push origin :branchname
          

          然后它将停止出现在自动完成结果中。

          【讨论】:

          • 我已将更改推送到origin/branchname,然后这些更改与origin/master 合并,origin/branchname 在遥控器上被删除。我仍然在自动完成中同时看到 branchnameorigin/branchnameorigin/branchname 可以,我只想删除本地,因为删除的分支太多了。
          • 如果你想删除本地然后只运行我的答案的第一行。
          • 分支实际上已被删除,git branch -a 没有显示任何内容。问题仅在于结帐自动完成。
          • 是的,因为它也存在于远程仓库中。
          • 我知道了,我只需要启动 git remote prune origin 来更新本地 repo。无论如何,感谢您的回答!
          【解决方案6】:

          您可能已经尝试删除 unmerged 分支,所以 git branch -d branchname 没有删除它。 您可以检查分支是否仍然存在:

          git branch -a
          

          如果您真的确定删除 ~brancheven if is notmerged`,您可以强制删除:

          git branch -D branchname
          

          【讨论】:

          • git branch -a 仅显示远程分支。被删除的本地分支我只能在结帐自动完成中看到。
          猜你喜欢
          • 2019-06-05
          • 2018-07-24
          • 2017-03-26
          • 2011-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-13
          • 2018-07-17
          相关资源
          最近更新 更多