如何删除名称为 remote/origin 的本地主机上的旧 git 分支
how to delete old git branches on localhost with remote/origin in name
我看到很多关于删除旧分支的交易,但是我的困惑是删除名称中带有 remote/origin/feature 的旧分支。
以下是我想在本地而不是远程删除的几个分支:
remotes/origin/feature/ghost-user-view2
remotes/origin/feature/ghosting-records-handling
remotes/origin/feature/profile-sync-fix
我试过了git branch -D feature/profile-sync-fix
那没用。我很紧张地尝试了很多并删除了一些我无法取回的东西。在不影响远程分支的情况下在本地处理它的正确方法是什么?
如您所知:在 git 中,一切都是本地的。你的历史是本地的,你的标签是本地的,你的分支是本地的。对于远程分支机构来说也是如此,尽管我理解您对该主题的不安全感。
与 git 中的任何分支一样,远程分支只是对特定提交的引用。 Git 只是认为这个分支因其命名而有所不同。通常所有本地分支都可以在 refs/heads
中的 .git
目录中找到,另一方面,远程分支位于 refs/remotes
中(以及 refs/tags
中的标签)。否则这个概念与 "usual" branches.
没有区别
编辑: 正如 Jubobs 在评论中所建议的:术语 remote-tracking branch
不那么令人困惑,应该暗示为什么这样的分支是本地的。他们只是在跟踪一个远程分支,而不是在远程本身。
现在你应该明白了,虽然git branch -r
列出了远程分支,但分支仍然完全是本地的。
但是 git 怎么知道把遥控器的 branches/changes 放在哪里呢?
好吧,这很简单,都在您可以在 .git/config
中找到的存储库配置中;在这里你可以找到你的遥控器(如果你有的话)的配置,它看起来应该与此非常相似:
[remote "origin"]
url = /this/is/the/url/to/my/remote
fetch = +refs/heads/*:refs/remotes/origin/*
有趣的部分是这个小文本片段:fetch = +refs/heads/*:refs/remotes/origin/*
它有什么作用?
它告诉 git 从 refs/heads
获取远程存储库的所有分支(其中包含所有本地分支)并 "map" 所有这些分支到 [=20= 中的分支](在我们的本地存储库中)。
TL;DR: git branch -rd
只会删除一个本地分支。远程存储库中分支的本地副本。
我看到很多关于删除旧分支的交易,但是我的困惑是删除名称中带有 remote/origin/feature 的旧分支。
以下是我想在本地而不是远程删除的几个分支:
remotes/origin/feature/ghost-user-view2
remotes/origin/feature/ghosting-records-handling
remotes/origin/feature/profile-sync-fix
我试过了git branch -D feature/profile-sync-fix
那没用。我很紧张地尝试了很多并删除了一些我无法取回的东西。在不影响远程分支的情况下在本地处理它的正确方法是什么?
如您所知:在 git 中,一切都是本地的。你的历史是本地的,你的标签是本地的,你的分支是本地的。对于远程分支机构来说也是如此,尽管我理解您对该主题的不安全感。
与 git 中的任何分支一样,远程分支只是对特定提交的引用。 Git 只是认为这个分支因其命名而有所不同。通常所有本地分支都可以在 refs/heads
中的 .git
目录中找到,另一方面,远程分支位于 refs/remotes
中(以及 refs/tags
中的标签)。否则这个概念与 "usual" branches.
编辑: 正如 Jubobs 在评论中所建议的:术语 remote-tracking branch
不那么令人困惑,应该暗示为什么这样的分支是本地的。他们只是在跟踪一个远程分支,而不是在远程本身。
现在你应该明白了,虽然git branch -r
列出了远程分支,但分支仍然完全是本地的。
但是 git 怎么知道把遥控器的 branches/changes 放在哪里呢?
好吧,这很简单,都在您可以在 .git/config
中找到的存储库配置中;在这里你可以找到你的遥控器(如果你有的话)的配置,它看起来应该与此非常相似:
[remote "origin"]
url = /this/is/the/url/to/my/remote
fetch = +refs/heads/*:refs/remotes/origin/*
有趣的部分是这个小文本片段:fetch = +refs/heads/*:refs/remotes/origin/*
它有什么作用?
它告诉 git 从 refs/heads
获取远程存储库的所有分支(其中包含所有本地分支)并 "map" 所有这些分支到 [=20= 中的分支](在我们的本地存储库中)。
TL;DR: git branch -rd
只会删除一个本地分支。远程存储库中分支的本地副本。