Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除Git上获取的远程设备?_Git_Github - Fatal编程技术网

如何删除Git上获取的远程设备?

如何删除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

我已经获取了一些远程分支,例如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/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 fetch
    更新这些远程跟踪名称。至少,从Git版本1.8.4开始,它就这样做了

  • 与所有引用一样,远程跟踪名称只记录一次提交的哈希ID。如果该提交来自任何其他名称,则远程跟踪名称仅指向该特定提交。如果无法从任何其他名称访问提交,则远程跟踪名称将在存储库中保持该提交及其前辈(父辈、祖辈等)的活动状态。(有关可达性的定义,请参见到的链接。)

    这意味着删除远程跟踪名称不会节省任何空间,除非该名称是实现某些提交的唯一方法,而这些提交占用了存储库中的大量空间。如果远程跟踪名称指向由其他提交和/或名称保留的提交,则删除它肯定不会保存任何内容,除了
    git branch
    output和类似内容中的一些屏幕空间。1

  • 当您运行
    git fetch remote
    时,没有其他参数,git将获取并更新
    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
vs
git-push
中做了一些特殊和不同的事情。对于
git push
,省略冒号意味着两边使用相同的名称,但是
git fetch --prune
git branch -rd <branch_name>