我真的为此疯狂。坦率地说,我不确定为什么我理解这一点,因为它应该很简单,对吧?首先,我已经对此进行了大量的搜索。我已经在stackoverflow上阅读了很多东西,我读过通过大量Google搜索找到的博客文章。然而,一些细节仍然不清楚,尽管这个问题可能看似重复和简单,所以我向那些正在徘徊在downvote / close按钮上的人们道歉。我今天在这里发布的原因是因为我在命令行上看到的行为与我实际在线阅读的行为不同。所以它让我困惑。
这里提出的两个命令是:
git branch -r -d origin/topic1
和
git push origin :topic1
到目前为止我的理解(虽然我可能完全错了,但我的大脑已被炒掉了):
这是我遇到的最近情景。我刚刚克隆了一个带有两个远程分支的存储库:
origin/master
origin/develop
我唯一的本地分支是:
master
我想删除远程分支origin/develop
,请注意:
Robert@COMP /c/Code/project (master)
$ git branch -rd origin/develop
Deleted remote branch origin/develop (was 9ff16e8).
Robert@COMP /c/Code/project (master)
$ git fetch
From github.com:username/project
* [new branch] develop -> origin/develop
正如您所看到的,我尝试删除远程分支,并立即从origin获取最新的更改,但由于某种原因,它重新创建了分支。我不知道为什么会这样做,我很困惑。我没有origin/develop
的本地相应分支,所以我不知道为什么会这样做。
我想知道为什么会发生这种情况,但也(为了解决这个问题的更一般的标题,并且可能帮助其他人清理堆栈溢出以获得这些令人困惑的模糊性的答案),我想要更一般的答案一些问题:
谢谢大家!请保存我的头发!
根据下面的答案,我能够澄清一件令人困惑的事情。 -r
州git branch
选项的文档:
列出或删除(如果与-d一起使用)远程跟踪分支。
我的困惑在于被认为是“远程”。最初对我来说远程意味着“起源”......在我的案例中,“github”就是什么。但是,在你的LOCAL克隆中,github有自己的遥控器概念,这是它自己的远程分支副本。所以基本上似乎删除远程分支涉及两个步骤:删除原始分支(这是git push origin :topic1
),然后删除远程跟踪分支(git branch -rb origin/topic1
)。
这有助于我的理解,虽然因为“远程”这个词在这里有两个含义,所以将这个问题传达给人们非常困惑,所以我希望这个问题的修正可以帮助人们将来。感谢所有回答的人以及将来继续为这个问题做出贡献的人!
答案 0 :(得分:2)
第一个应该删除跟踪引用和远程分支
否:这是本地操作,因此它只能删除远程跟踪分支(在您的仓库中)
远程跟踪分支用于记住从远程仓库上的分支获取的最后一个SHA1
如果要删除该分支(在远程仓库上),则需要告诉远程仓库(因此git push :topic1
)
本地分支(您的仓库中的分支)可以是:
如“How can I delete all git branches which are already merged?”中所述,一旦删除了远程仓库的多个分支,就可以使用以下命令修剪本地仓库的所有远程跟踪分支:
git remote prune origin