如何删除Git上获取的远程设备?
我已经获取了一些远程分支,例如git fetch jason sprint-36。我附上了一个截图(红色是遥控器):如何删除Git上获取的远程设备?,git,github,Git,Github,我已经获取了一些远程分支,例如git fetch jason sprint-36。我附上了一个截图(红色是遥控器): 如何停止跟踪/从列表中删除遥控器?例如,4个月前我做了git获取ken retain cycle fix,我再也不会获取或查看此分支,我如何删除它?要删除远程跟踪名称,如remotes/jason/sprint-36或remotes/ken/retain cycle fix,您可以使用git branch-r-d: $ git branch -r -d remotes/jaso
如何停止跟踪/从列表中删除遥控器?例如,4个月前我做了
git获取ken retain cycle fix
,我再也不会获取或查看此分支,我如何删除它?要删除远程跟踪名称,如remotes/jason/sprint-36
或remotes/ken/retain cycle fix
,您可以使用git branch-r-d
:
$ git branch -r -d remotes/jason/sprint-36
比如说。但是,很少有理由这样做,因为如果运行git fetch jason
,您将立即重新获取所有remote/jason/
远程跟踪名称
要删除整个远程设备及其所有远程跟踪名称,请使用git remote remove
或git remote rm
(同一子命令有两个名称)
有用的背景知识(这些都不是必读的,你可以到此为止)
这里有几点值得注意,它们都不是问题的直接答案,但对完整性有用:
- 首先,Git将这些东西称为远程跟踪分支名称,但它们实际上不是分支,因为分支或至少分支名称是您可以给
的名称,从而将Git checkout
附加到该名称上 也就是说,在HEAD
或在您的情况下,git checkout master
之后,您将“进入”该分支。git checkout sprint-41
命令将显示分支分支上的git status
,您所做的新提交将自动更改该分支名称,以便它指向刚刚进行的新提交。这些远程跟踪名称都不适用,这就是为什么我开始称它们为“远程跟踪名称”,完全删除branch这个词 - 他们有全名表格。
的全名实际上是remotes/jason/sprint-36
。全名可以缩写,这得益于中描述的六步名称解析过程:refs/remotes/jason/sprint-36
通常有效,如果无效,jason/sprint-36
通常有效,但如果两者都无效,则全名形式始终有效 无论出于何种原因,remotes/jason/sprint-36
列出了不带git branch-r
的缩短版本,而remotes/
列出了带git branch-a
的缩短版本remotes/
- 远程跟踪名称的目的是,跟踪一个名称,特别是远程服务器上的分支名称。因此,
更新这些远程跟踪名称。至少,从Git版本1.8.4开始,它就这样做了git fetch
- 与所有引用一样,远程跟踪名称只记录一次提交的哈希ID。如果该提交来自任何其他名称,则远程跟踪名称仅指向该特定提交。如果无法从任何其他名称访问提交,则远程跟踪名称将在存储库中保持该提交及其前辈(父辈、祖辈等)的活动状态。(有关可达性的定义,请参见到的链接。)
这意味着删除远程跟踪名称不会节省任何空间,除非该名称是实现某些提交的唯一方法,而这些提交占用了存储库中的大量空间。如果远程跟踪名称指向由其他提交和/或名称保留的提交,则删除它肯定不会保存任何内容,除了
output和类似内容中的一些屏幕空间。1git branch
- 当您运行
时,没有其他参数,git将获取并更新git fetch remote
设置中列出的引用(使用remote.remote.fetch
查看这些引用)。运行git config--get all remote.remote.fetch
时,git fetch remote refspec1[refspec2[…]]
将仅基于给定的git fetch
参数进行更新refspec
1从技术上讲,如果远程跟踪名称当前已解包,则可能会保存一个左右的磁盘块。但是,大多数远程跟踪名称都是打包的(与许多其他名称一起存储在
.git/packed refs
)
使用
--prune
或Fetch.prune进行提取
您可以定期运行git fetch
或git fetch origin
来更新origin
的所有远程跟踪名称。(例如,我这样做。几乎任何时候都这样做是非常安全的。)当你这样做时,你会获得很多远程跟踪名称
最终,这些名字中的一些可能会从源代码中消失。不过,它们不会自动从您自己的远程跟踪名称中消失。要使它们自动消失,请使用git fetch--prune origin
,或将fetch.prune
配置为true
,这使得git fetch
默认使用--prune
。将origin
替换为任何远程设备,如jason
或ken
,以使用修剪更新所有内容。(但如果您不想更新所有内容,请不要这样做。这是“一体式”设置,它会创建或更新该远程设备的所有远程跟踪名称,同时删除所有死掉的名称。)
Refspecs,或者更多关于正在运行的git fetch
es的信息
在上面的一个示例中,您运行了:
git fetch jason sprint-36
这使用sprint-36
作为参考规范。refspec通常由两个用冒号分隔的名称组成,例如,refs/heads/master:refs/remotes/origin/master
。省略冒号和第二个名称在git-fetch
vsgit-push
中做了一些特殊和不同的事情。对于git push
,省略冒号意味着两边使用相同的名称,但是
git fetch --prune
git branch -rd <branch_name>