这可能是一个愚蠢的问题,但我是全新的git和看到一个远程分支,不再存在。
$ git branch -a
* master
remotes/origin/master
remotes/origin/production
字符串
我不相信生产分支存在于远程,并且无法弄清楚为什么它仍然显示在本地。如何删除/移除此分支?以下是尝试移除它的样子:
$ git push origin :production
error: unable to push to unqualified destination: production
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@IP:puppet.git'
型
我可以 checkout 所谓的远程生产分支,但得到了这个:
$ git checkout origin/production
Note: checking out 'origin/production'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at c323996... added powerdns module, no really
型
我不知道我在做什么。任何帮助都将不胜感激。
4条答案
按热度按时间j2cgzkjk1#
你必须做:
字符串
ss2ws0br2#
所以有两个问题。在这两种情况下,请记住Git是分布式的。
首先,当你做一些事情,比如
$ git分支-a
该操作在您的本地存储库而不是远程计算机上执行。换句话说,您的本地存储库正在报告已知的所有分支。这些分支可能是本地分支(如“master”)或从远程获取的远程分支。自上次获取以来,远程存储库的“production”分支已更改,但是你的本地仓库不知道这个。来自manojlds的答案是正确的。运行
$ git remote prune
来移除陈旧的树枝
“git push origin:production”命令用于从远程计算机的git仓库中删除分支。而不是本地仓库。在这种情况下,其他人已经在远程计算机的git仓库中删除了分支,所以你会看到这个错误消息。
下面是一个link,它总结了这些命令。
第二个问题是结帐。
当检出一个分支时,你想从本地分支,而不是远程分支。这就是为什么你会得到一个关于分离的HEAD的错误。git-notes repo对这个问题有一个很好的解释。基本上关键的短语是
然而,当你 checkout 任何不是正确的本地分支名的东西时,HEAD就不再是对任何东西的符号引用,而是实际上包含了你要切换到的提交的SHA-1哈希(提交id)。
现在,如何检出与远程分支相同的本地分支?
简单,你创建一个本地分支,在 checkout 的时候远程分支.
$ git checkout -B my_local_分支来源/生产
t1qtbnec3#
字符串
是正确的,只是添加你可以使用
--dry-run
选项,报告哪些分支将从您的本地存储库修剪,但实际上并不修剪它们型
dsekswqp4#
其他答案中的命令似乎没有达到预期的目标,似乎是从不再存在的分支中清理
origin
下列出的分支列表。至少在2023年不会。然而,真正起作用的是:
字符串