推送后,为什么远程删除的分支没有删除?

Yug*_*dle 4 git version-control branch dvcs git-flow

我正在使用git-flow它的作用是它feature/abc每当我删除我的分支:

git flow feature abc finish
Run Code Online (Sandbox Code Playgroud)

它与feature/abc分支合并后删除develop分支.之后,我推动我的develop分支.

git push origin develop
Run Code Online (Sandbox Code Playgroud)

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

在我的理解中:

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

冲突:

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

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

更新

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

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

pok*_*oke 5

因为,GIT是DVCS,在推/拉时应该是相同的.

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

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

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

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

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

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

git push remote :branch
Run Code Online (Sandbox Code Playgroud)