【问题标题】:Does git have some kind of caching mechanism?git有某种缓存机制吗?
【发布时间】:2020-02-08 23:43:20
【问题描述】:

我在 Windows 上遇到了一个“奇怪”的 Git 问题,我不确定最近是否发生了一些变化,例如添加了缓存机制或关闭。

我在本地有一个分支:branch_A,该分支已从远程删除。我怎么知道?因为……

  • 我查看了 Github PR,它被合并了,分支被删除了
  • 我运行了命令git branch -r | grep branch_A,没有返回任何结果

由于某种原因,命令:

git checkout master && git pull origin master && git fetch -p

没有告诉我从远程删除的所有分支。换句话说,它显示了一些从远程删除的分支,但也错过了其他一些被删除的分支。

这导致我最终得到死分支,让我很难知道我应该保持哪些分支更新,并且我必须通过所有 PR 检查分支是否被删除,以便我清理我的本地存储库。

注意:我不希望该命令在本地删除任何分支,这是没有意义的,因为 git 不知道我是否需要它(正如@Chris 在其答案中所说)

我运行的 Git 版本是:git version 2.23.0.windows.1

有人知道这里可能出了什么问题吗?我错过了什么吗?

【问题讨论】:

  • 一方面,这是出乎意料的(“没有告诉我分支已被删除”),我只是在2.22.0.windows.1 版本上尝试过,它输出清楚` - [deleted](无) - > origin/testbranch`(顺便说一句,我猜你不是第一个搜索 git 的 cashing 机制的人...... ;-))
  • 注意git pull 运行git fetch 作为它的第一步。您可以使用git pull -p-p 传递给git fetch;或者你可以手动运行git fetch,通过-p,手动运行第二条命令;或者您可以在本地或全局配置中将fetch.prune 设置为true,以使git fetch 每次假设 -p

标签: git git-fetch


【解决方案1】:

git fetch -p 只会向您显示已删除的远程分支您仍然可以参考。

git fetch -p 应该告诉你哪些远程分支被删除了;提供这样的输出:

 - [deleted]         (none)     -> origin/branch_A

这将从您的存储库中删除引用 origin/branch_A,但不是您的本地分支 branch_A

正如您在this question 中看到的那样,似乎没有一个简单的答案。原因是git 不确定您不再需要该分支;它可能与被删除的远程分支不同步(由于引用已经消失,因此无法再检查它)。

【讨论】:

  • 问题是该命令显示了一些从远程删除的分支,但错过了其他一些被删除的分支。我不希望该命令在本地删除任何内容,这是没有意义的。我的问题是命令没有显示从远程删除的所有分支。 (将此添加到 OP 以避免任何混淆)
  • 也许您之前执行过git fetch -pgit 只会提及已删除的分支以及您仍然可以参考的分支。
  • 如果在远程你现在创建一个分支然后删除它; git fetch -p 不会告诉你,因为你甚至没有本地参考...
  • 好吧,我不记得我之前是否运行过该命令,可能只是说这很奇怪。我会接受你的回答,因为这可能是我做错了事情或边缘情况,如果我再次遇到同样的问题,我会在 OP 中添加更多信息。谢谢:)
猜你喜欢
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多