【问题标题】:Why do I see a deleted remote branch?为什么我看到已删除的远程分支?
【发布时间】:2013-06-12 06:46:24
【问题描述】:

我有一个远程存储库和 2 个克隆。
我在其中一个克隆中创建了一个分支,例如test。我做了一些工作和 2 次提交。我合并到master 分支和push -u 分支。
我在另一个克隆中做了一个git pull
我看到mastertest
在我做的第一个克隆项目中:
git origin :test 删除远程存储库上的test 分支。
test 在远程存储库上被删除。
我做git branch -D test 并且test 分支也被本地删除。
如果我这样做git branch -a,我会得到:

*master  
remotes/origin/master    

现在在第二个存储库中,我执行git pull
在拉取本地test 似乎已被删除,但git 似乎“认为”远程test 分支仍然存在。
如果我这样做git branch -a 我会得到:

* master  
  remotes/origin/HEAD -> origin/master  
  remotes/origin/master  
  remotes/origin/test    

为什么删除的test 分支显示为远程分支?

【问题讨论】:

    标签: git version-control git-branch git-clone git-pull


    【解决方案1】:

    尝试使用此命令git remote prune origin。删除的分支应该消失。这应该会删除对远程分支的本地引用。

    【讨论】:

    • 实际上我期待git 提示我执行此操作,就像它提示执行git pull 一样。为什么不提示?我看到它提示但可能是在不同的用例中?
    • 是的,我知道你的意思。我真的不能说我在拉动时看到 git 提示过任何有关此的信息,所以我猜这是一个不同的用例。也许试图将某些内容推送到已删除的分支?
    【解决方案2】:

    git fetch(以及因此git pull)的默认选项不会修剪已删除的远程分支。我不确定这个默认值背后的逻辑是什么。无论如何,要修剪已删除的远程分支,请使用

    git fetch -p
    

    或运行

    git remote prune [-n] <name>
    

    明确。使用-n 标志,它将报告哪些分支将被修剪,但实际上并不修剪它们。请参阅git-fetch(1)git-remote(1) 了解更多信息。

    【讨论】:

    • 但是如果存储库不是我的,我怎么知道我需要prune
    • 您可以运行git remote prune -n &lt;name&gt; 来获取列表,但我总是在每次获取时都运行git fetch -p。我没有意识到git pull 上没有它的选项,因为我从不使用git pull
    • 这与在本地执行 git branch -d 有何不同?我在本地有一个名为“feature-test”的分支,它在远程被合并和删除,现在我做了git pull -p,但它仍然在我的本地存储库中。所以修剪不起作用?!
    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2013-03-25
    • 2016-07-08
    • 2021-06-25
    相关资源
    最近更新 更多