我今天在这里发帖的原因是因为我在命令行上看到的行为与我实际在网上阅读的行为不同。所以这让我很困惑。
这里有问题的两个命令是:
git branch -r -d origin/topic1
and
git push origin :topic1
到目前为止我的理解(不过我可能完全错了,我的大脑已经炸了):
- 第一个应该删除跟踪参考and远程分支
- 第二个应该删除远程分支,但不删除跟踪引用(如果本地分支存在),尽管您不删除跟踪引用的原因似乎毫无意义,并且让我作为一个初学者感到困惑。
这是我最近遇到的一个场景。我刚刚克隆了一个具有两个远程分支的存储库:
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/develop
,所以我不知道为什么要这样做。
我想知道为什么会发生这种情况,而且(为了解决这个问题的更一般的标题,也许可以帮助其他人清理堆栈溢出以找到这些令人困惑的歧义的答案),我想对一些问题有更一般的答案:
- 有两种方法可以删除远程分支。有什么真正好、简单的方法来记住在哪种情况下使用哪个?
- 假设这很重要,那么相应的本地分支(对于远程分支)的存在如何影响如何删除远程分支的决定?
- 本地和远程分支之间跟踪引用/关系的存在如何影响您选择删除分支的方式,以及哪种删除分支的方法也会清除跟踪引用?
第一个应该删除跟踪引用和远程分支
否:它是本地操作,因此只能删除远程跟踪分支(位于您的存储库中)
远程跟踪分支用于记住从远程存储库上的分支获取的最后一个 SHA1。
如果您想删除该分支(在远程存储库上),您需要告诉该远程存储库(因此git push :topic1
)
本地分支(您的存储库中的一个)可以是:
- 一个简单的分支
- 远程跟踪分支(由 fetch 创建的分支)
- 本地跟踪分支(因为它有一个上游分支 https://stackoverflow.com/a/6244487/6309与其相关)
正如《如何删除所有已合并的 git 分支? https://stackoverflow.com/a/6127884/6309”,一旦删除了远程存储库的多个分支,您可以使用以下命令修剪本地存储库的所有远程跟踪分支:
git remote prune origin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)