git – 为什么在推送后没有删除遥控器上删除的分支?

我正在使用git-flow,它的作用是在我执行时删除我的feature / abc分支:

git flow feature abc finish

它在与develop分支合并后删除feature / abc分支.之后我推动了我的开发分支.

git push origin develop

现在,在遥控器上,我能够看到feature / abc分支,但不能在本地看到.那么,这是否意味着它从本地仓库删除,并且删除没有被带到远程?

在我的理解中:

>由于git是分布式的,因此所有机器上都存在整个存储库.
>所以,如果我改变我的本地仓库并将其推送到遥控器.
>然后,我的所有更改都应该推送到远程,包括删除.

冲突:

>推送后本地和远程git repo如何不同.

=>假设我是代码的唯一开发人员.

更新

我的问题是我在合并后本地删除了分支.然后我推动了我合并的分支,然后为什么没有反映在遥控器上?
因为,GIT是DVCS,在推/拉时应该是相同的. [考虑到我是唯一的开发者]

我没有要求创建它.它使分支进行了我的更改,将其合并,然后删除了分支并推送了我更新的开发分支.那么,如果它自动检测到那些分支的创建那么为什么不删除呢?

最佳答案

Since, GIT is DVCS and should be identical on push / pull.

不,那不是真的.它是分布式的,因此网络中的每个存储库或多或少都包含相同的数据,但只包含更多或更少的数据.当您使用推拉时,您明确指定要推送的内容.

git push remote branch只将分支指针分支推送到远程存储库,并传输远程存储库构建它所需的所有提交,但不是更多.这意味着只有分支指向的提交才会被实际推送,直到远程存储库找到它已经拥有的公共父级(在最坏的情况下,这是特殊的零提交,即空父级).

以同样的方式,git pull remote branch仅获取在本地构建远程分支remote / branch所需的更改.

要真正获得所有提交,您可以使用git fetch,并推送所有本地分支,您可以使用git push –all.但同样,它只获取/推送构造分支(或标记)所需的提交,而不是存储库所拥有的所有提交.

现在,当您将分支推送到远程存储库时,它将仅更新您实际推送的那些分支,因此当您删除本地远程并使用–all推送时,只会推送您的本地分支,并且不包括已删除的分支.因此,您的本地Git不再知道您在本地删除了哪些分支(因为它们已合并),因此无法自动将该信息提供给远程存储库.然而,它可以做的是告诉远程存储库本地的每个分支,以便远程可以找出哪些被删除.您可以使用选项–prune来完成此操作.但请注意,这将删除本地不存在的所有分支,因此在处理多个推送不同分支但不拉动其他分支的用户时可能会出现问题(尽管我实际上从未测试过).

最好的办法是直接删除本地删除的分支:

git push remote :branch

转载注明原文:git – 为什么在推送后没有删除遥控器上删除的分支? - 代码日志