Git 将新分支推到远程再次推送所有内容

Git 将新分支推到远程再次推送所有内容,git,bitbucket,git-branch,git-push,Git,Bitbucket,Git Branch,Git Push,我从master创建了一个新分支develop。然后,我使用git push-u origin developefromdevelopebranch将新分支推送到远程。此命令花费了太多时间来推送新的develope分支。输出为: $ git push -u origin develop Counting objects: 11531, done. Delta compression using up to 4 threads. Compressing objects: 100% (6217/62

我从
master
创建了一个新分支
develop
。然后,我使用
git push-u origin develope
from
develope
branch将新分支推送到远程。此命令花费了太多时间来推送新的
develope
分支。输出为:

$ git push -u origin develop
Counting objects: 11531, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6217/6217), done.
Writing objects: 100% (11531/11531), 38.90 MiB | 142.00 KiB/s, done.
Total 11531 (delta 6220), reused 7234 (delta 3876)
remote: 
remote: Create pull request for develop:
remote:   https://bitbucket.org/scupids/supertext/pull-requests/new?source=develop&t=1
remote: 
To https://knoxxs@bitbucket.org/scupids/supertext.git
 * [new branch]      develop -> develop
Branch develop set up to track remote branch develop from origin.
$
从输出来看,它似乎再次推动了一切。它推送了大约40个MiB的数据

仅供参考,原点位于Bitbucket上

以下是log命令的输出:

$ git log --oneline --graph --all --decorate
* faa7d51 (HEAD, origin/master, origin/develop, master, develop) adds profile data to customer DTO
* 1f562c1 UI/ latest compiled css
* d19ccb0 UI/ Added customer stream and basic styling
.
.
.

我无法理解为什么会发生这种情况?

我认为这是git的正常行为

想象一下,某个未与远程主分支同步的人想要打开您的分支,该分支包含来自主分支的一些提交,但他还没有

您认为它的工作方式将阻止该用户拉取您的分支,因为如果不同步其本地主分支,他就不会有丢失的提交


由于您的分支树从一开始就包含每个提交,因此此问题不会发生,用户可以随时拉取您的分支。

Git不会每次都推送所有内容

这种情况的可能解释是:您克隆了一些存储库,然后将本地存储库的
origin
url更改为指向另一个(可能是空的)存储库(在这种情况下,git不会使
remotes/origin/*
分支失效)。然后您推送,git在另一端没有发现提交,因此它必须从
develope
推送每个提交

我刚刚使用Bitbucket HTTPS传输进行了测试:简单的“新分支”
push
传输大约200字节(请参阅
POST-git-receive-pack
行):


你在这件事上有什么不明白的?所有被推送到新分支的东西,是输出还是复杂日志命令的输出?我从推送到的数据的大小得出结论。我不确定我的结论是否有误。但是为什么它会推送那么多数据呢?你能解释一下为什么-u选项吗?数据的大小将是你在另一个分支中的所有提交。这就是庞大规模的原因。@rajuGT使
develope
跟踪
origin/develope
@为什么要再次推动其他分支的所有承诺?我明白你的意思了。实际上,今天我是第一次阅读git工作流,并计划在我的工作流中包含
feature/topic
分支。在阅读有关工作流的文章时,我了解到我将创建一个
特性/主题
分支。这意味着每当我要创建一个新的
特性/主题
分支时,我必须再次推送完整的提交历史记录?这对于像我这样只有1k提交的项目来说很好,但是将一个新的
特性/主题
分支推到一个大的OS项目(比如linux)可能需要很长时间。在这种情况下人们会怎么做?这可能需要很长时间。处理在线分支的最佳方法是在合并后不删除分支,并使用此分支向主题功能添加内容。这太疯狂了。我的意思是,git绝对不应该推送已经存在于另一端的提交,否则每一个小的提交推送都会导致整个分支传输。@Roman实际上是对的。在我前面解释的例子中,服务器只向用户发送来自主分支的缺少的提交。很抱歉,我累了,这是糟糕的一天^^^但是我的远程主机在我推动更改之前是最新的。另外,您在
develope
的父分支中有多少次提交您确定“远程主机是最新的”吗?我从
master
创建了分支
test
(因此这两个分支指向同一个提交)
master
有很多很多提交(repo大小约为15 MiB)。如果您对我的解释有疑问,您能否从头开始重现您的问题(从
git clone…
开始,以
git push--verbose…
结束)并显示您的操作的完整日志?是的,我200%肯定我的主机在上面,因为我推送了所有更改,然后创建了新的分支。我将尝试详细选项。@knoxxs那么您是否尝试从头开始复制它?
$ git checkout -b test
Switched to a new branch 'test'

$ git push --verbose -u origin test
Pushing to https://user@bitbucket.org/user/repo.git
Password for 'https://user@bitbucket.org': 
Total 0 (delta 0), reused 0 (delta 0)
POST git-receive-pack (183 bytes)
remote: 
remote: Create pull request for test:
remote:   https://bitbucket.org/user/repo/pull-requests/new?source=test&t=1
remote: 
To https://user@bitbucket.org/user/repo.git
 * [new branch]      test -> test
Branch test set up to track remote branch test from origin.
updating local tracking ref 'refs/remotes/origin/test'