【问题标题】:What is Git pruning?什么是 Git 修剪?
【发布时间】:2016-07-05 02:43:47
【问题描述】:

我不小心修剪了一些远程分支,我真的不知道这样做的后果是什么(我点击了 Git Extensions 中的“修剪远程分支”按钮,以为它会删除一个远程分支)。

官方文档说“git-prune - Prune all unreachable objects from the object database”。我真的不明白这是什么意思。我猜这可能已经删除了合并的分支,但我不太确定。

【问题讨论】:

标签: git git-extensions


【解决方案1】:

这只是垃圾收集你的分支。

这意味着,如果在您的任何分支的祖先中无法访问某个对象(提交),它将被 git 数据库删除,因此无法再访问。

这只是清理了一点 git 存储库并使其更轻。

【讨论】:

  • 根据文档,对于像这样的内务管理任务,最好使用git gc 而不是git prune,后者本质上也会执行 git prune。
  • 投反对票:这个答案(以及与此相关的问题)混淆了git prunegit remote prune。它们不一样,后者实际上清除了远程不再存在的分支,同时保持本地分支不变。
【解决方案2】:

Git Extensions 中的“修剪远程分支”执行git remote prune 命令,该命令将删除您的本地远程跟踪分支,其中该分支不再存在于远程。

请看这里:https://git-scm.com/docs/git-remote#Documentation/git-remote.txt-empruneem

删除与 关联的过时引用。默认情况下, 下过时的远程跟踪分支会被删除,但根据全局配置和远程配置,我们甚至可能会修剪尚未推送到那里的本地标签。等效于git fetch --prune <name>,只是不会获取新的引用。

请参阅git-fetch 的 PRUNING 部分,了解它将根据各种配置进行修剪。

使用--dry-run 选项,报告将修剪哪些分支,但实际上并不修剪它们。

【讨论】:

  • 所以它基本上优先考虑您的远程并调整您的本地以匹配您的远程分支?
  • @Honey 不,它只是移除了本地的远程跟踪分支,正常分支不会被触及。
  • 完整的命令是git remote prune <name>,其中<name>是远程的名称(通常是origin)。
  • 如果这些分支没有合并到另一个分支,这可能会导致无法访问这些分支中的提交。警告将是有序的。
【解决方案3】:

可能有远程功能分支在我们将它们合并到 master 后被删除。我们可能已经删除了功能分支作为清理的一种方式。但是,如果您已将已删除的分支检出到本地系统并将状态设置为跟踪,则 git pull 不会删除这些本地分支(因为它们已经与服务器断开连接)。要清理这种本地孤儿分支,git prune 命令会派上用场。

【讨论】:

    【解决方案4】:

    了解 prune 是 repo-bound 很重要。不是每个人都知道您可以将本地存储库链接到多个遥控器。例如,当您使用开源项目并强制通过分叉工作时,它会派上用场。

    因此,prune 命令需要一个 repo 名称。在大多数情况下它是git remote prune origin,但你可以调用你的repo任何东西,它不必是origin

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 2011-03-23
      • 1970-01-01
      • 2010-11-15
      • 2021-01-04
      • 1970-01-01
      • 2011-05-06
      • 2011-12-29
      • 2011-01-19
      相关资源
      最近更新 更多