4

我正在使用它,它的作用是每当我这样做时git-flow它都会删除我的feature/abc分支:

git flow feature abc finish

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

git push origin develop

现在,在远程我可以看到feature/abc分支,但不能在本地看到。那么,这是否意味着它已从本地存储库中删除,并且该删除没有被带到远程?

据我了解:

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

冲突:

  • 推送后本地和远程 git repo 有何不同。

=> 假设我是代码的唯一开发者。

更新

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

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

4

1 回答 1

5

因为,GIT 是 DVCS,在推/拉上应该是相同的。

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

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

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

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

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

最好的显然是直接删除本地删除的分支:

git push remote :branch
于 2012-06-21T08:56:36.320 回答