【问题标题】:Delete unreferenced remote branches删除未引用的远程分支
【发布时间】:2022-08-13 01:40:36
【问题描述】:

我一直在学习 git 以及如何在 GitHub 上使用远程分支。 我有一个远程分支 origin/other-branch 并合并以更新分支,所以当我放

git log --oneline --graph --all

我得到以下输出

  • * 352a7d7 (HEAD -> master, origin/master) 与其他合并
  • * 1da6f0a (origin/other-branch) 其他分支
  • * 2b02a4b 另一个提交

所以我想删除 origin/other-branch 但我不知道该怎么做,所以我从 GitHub (the website)

然后,我研究了如何删除远程分支(哈哈,我想我应该先这样做),我得到以下命令:

git push origin --delete other-branch

发送删除分支是什么意思,但由于它不再在远程我收到消息,它找不到这样的分支

错误:无法删除 \'other-branch\':远程引用不存在 错误:未能将一些参考推送到 \'https://github.com/myUserName/remote.git\'

那么如何删除这个远程分支呢?谢谢!

值得一提的是,这个分支是另一个用户发送的,由于我不想再处理它,我想从本地删除它

  • 另一个分支称为other-commit,而不是other-branch。 (这是一个可怕的名字,但根据你的说法,这就是它的名字。)所以git push origin --delete other-commit
  • 还记得先做git fetch,然后再做git branch --all,以确保没有人别的同时删除了远程分支。
  • @matt haha​​,我的错,我写这个问题很困惑,实际上我确实使用了 other-branch 并且我得到了同样的错误
  • 正如我所说,这就是为什么你需要做git fetch,然后是get branch --all

标签: git github git-branch remote-branch


【解决方案1】:

当您在 git 上使用遥控器时,您的本地存储库与远程完全分离,并且只有在您这样说时才会与远程分支纠缠在一起。

git fetch 命令在这里很重要 (documentation)。当您运行git fetch 时,它并没有真正改变您本地存储库中的任何内容。相反,您可以将其视为获取信息关于遥控器及其分支,并将它们暴露给您。如果您获取了遥控器,git branch -a 将显示您的所有分支,包括遥控器上的分支。

但需要注意的是,本地存储库中不存在这些远程分支。 git branch 将向您展示您当地的所有分支机构。假设这是您的情况:

Local branches       origin (remote) branches
---                  ---
main                 main
feature1             staging
                     otherFeature2

git branch -a 将列出所有这些分支,但只有本地分支存在于您的存储库中。

您可以将本地分支设置为“跟踪”远程分支,这可以通过几种不同的方式完成。如果你在上述状态下运行git checkout staging,git会说“我这里没有看到staging分支,但是我看到origin上有一个,所以我会建立一个同名的本地分支为您服务并将其设置为跟踪origin/staging。”如果您在本地创建分支,则使用命令git push -u <remote> <branch-name> 推送它,其中-u 表示上游(您希望跟踪它的远程的名称),<branch-name> 将是上分支的名称偏僻的。这可能与您的本地名称不同,但如果它们相同,通常会更容易。我给git push -u origin `git branch --show-current` 起了别名,因为它是一个很常见的命令。如果远程上不存在具有该名称的分支,它将被创建,但如果它已经存在,git 将简单地开始跟踪您的本地分支到它。

现在如果状态是这样的:

Local branches         origin (remote) branches
---                    ---
main          -track-> main
staging       -track-> staging
feature1      -track-> feature1
otherFeature2 -track-> otherFeature2

现在应该更清楚实际发生了什么。这里有 8 个分支:4 个本地分支和 4 个远程分支。如果你去 GitHub 并删除那里的一个分支,它会只要删除远程分支 - 如果远程分支可以访问您的本地存储库并删除您的东西,那将是非常糟糕的!但是你的本地存储库不会知道在 GitHub 上所做的更改,直到你告诉它获取远程的信息 - 使用 git fetch origin。然后,origin/branch-name 应该停止出现。

删除遥控器的另一种方法是使用您提到的命令git push --delete <remote> <branch-name>。因为您从本地存储库运行它,所以您不需要 git fetch 来更新,但您的本地分支仍然存在。这意味着您仍然需要使用git branch -d <branch-name> 删除您的本地分支。

另一方面,如果您在本地删除一个分支,其跟踪的远程分支将很高兴地保持存在。如果你想彻底清除这个分支的项目,你必须同时做这两个。但请注意确保在删除远程分支之前没有其他人在使用它!

【讨论】:

    【解决方案2】:

    如果远程存储库中不再存在该分支,但您在此之前已获取并且仍然有远程跟踪分支(通常为origin/branchname),请使用git remote 命令清理您的本地存储库:

    git remote prune origin
    

    删除远程不再存在的所有本地远程跟踪分支。

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多