【问题标题】:I see non-existing remote branches and what does git remote prune origin do in that case?我看到不存在的远程分支,在这种情况下 git remote prune origin 会做什么?
【发布时间】:2021-07-28 17:54:47
【问题描述】:

我愿意:

$ git branch -a
  feature/XXX-5793
  feature/XXX-6864
  feature/XXX-7534
  feature/XXX-9067
  feature/XXX-9204
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature/BIOVK-13
  remotes/origin/feature/XXX-11313
  remotes/origin/feature/XXX-11481
  remotes/origin/feature/XXX-3311
  remotes/origin/feature/XXX-5793
  remotes/origin/feature/XXX-6448
  remotes/origin/feature/XXX-7237
  remotes/origin/feature/XXX-7534
  remotes/origin/feature/XXX-9067
  remotes/origin/feature/XXX-9204
  remotes/origin/master

我的第一个问题是:在 remotes/origin 列表中有一些分支不再在我们的 bitbucket 服务器上。怎么可能?

在这之后我做了:

$ git remote prune origin
Pruning origin
URL: ...
 * [pruned] origin/feature/XXX-11481
 * [pruned] origin/feature/XXX-3311
 * [pruned] origin/feature/XXX-5793
 * [pruned] origin/feature/XXX-6448
 * [pruned] origin/feature/XXX-7237
 * [pruned] origin/feature/XXX-9067
 * [pruned] origin/feature/XXX-9204

我的第二个问题是:我想:git remote prune origin 删除了不再存在的远程本地分支。但是这里我的远程分支列表被清除了。

后来我用 git branch -d 去掉了本地分支,结果变成了:

$ git branch -a
  feature/XXX-7534
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature/XXX-11313
  remotes/origin/feature/XXX-7534
  remotes/origin/master

【问题讨论】:

    标签: git github bitbucket


    【解决方案1】:

    git 被设计成完全去中心化的,并且在没有始终在线的互联网连接的情况下也可以使用,因此实际上很少有命令与远程服务器联系。

    在不联系 Bitbucket 服务器的情况下,git 无法知道哪些分支实际上仍然存在。那么您看到的分支名称是什么,当您询问时哪些分支名称被“修剪”了?

    如果您查看the description of git remote prune in the manual,您会看到:

    默认情况下, 下过时的远程跟踪分支会被删除

    这里的基本情况是,当您从远程服务器获取数据时,git 会以“远程跟踪分支”的形式缓存这些数据。这些行为有点像普通分支,但实际上只是一个标记,表示“上次我们与远程服务器通信时,有一个具有此名称和此提示提交的分支”。

    这些指针完全独立与您可能使用相同名称创建的本地分支:您可能有一个本地“master”,一个“origin/master”指代到一个远程服务器,而“joebloggs/master”指的是不同的远程服务器。同时,实际远程服务器可能在 master 上有新的提交,或者已经完全删除了它,但是你的互联网被拔掉了,所以你无法知道。

    这让您可以运行类似git diff master origin/master 的命令,它会根据您拥有的远程分支的最新缓存将您的本地分支“master”与远程分支“master”进行比较。 p>

    默认情况下(没有--prune 选项),运行git fetch 将创建和更新这些指针,但永远不会删除它们 - 如果远程服务器上没有该名称的分支,则本地指针将被保留最后一次出现的地方。这些是手册中所说的“陈旧的远程跟踪分支”:一个缓存曾经存在于远程服务器上的东西,但现在不再存在了。

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2016-12-27
      • 2013-12-05
      • 2013-06-09
      • 1970-01-01
      相关资源
      最近更新 更多