git push origin new_local_branch推送所有文件

时间:2016-06-01 18:08:26

标签: git

我在本地计算机上克隆了一个远程git存储库。

我用

创建了一个分支
git checkout -b new_local_branch

我做了一些改变。

现在我想用

将我的本地分支推送到远程存储库
git push origin new_local_branch

我很惊讶git正在将所有文件发送到远程存储库(不仅仅是修改过的存储库) 这是正常的吗?我怎么能避免这种情况?

提前致谢

1 个答案:

答案 0 :(得分:0)

你一定误解了什么。 Git push只发送新的对象。例如,看看这个简单的序列,我更新一个文件(README.txt)并将其推送到新的远程分支。

$ git checkout -b new_branch
Branch new_branch set up to track local branch master.
Switched to a new branch 'new_branch'

$ echo "New readme file content" > README.txt 

$ g commit -a -m "Commit only on new branch"
[new_branch 8d8f56d] Commit only on new branch
 1 file changed, 1 insertion(+), 3 deletions(-)

$ git log --oneline --decorate
8d8f56d (HEAD, new_branch) Commit only on new branch
d101a0e (origin/master, master) Small update
2d02c36 Initial commit

$ git push origin new_branch
Counting objects: 3, done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /tmp/myrepo.git/
 * [new branch]      new_branch -> new_branch

Git push只发送了3个对象。那些是:

  1. 包含文本的新blob对象:“新自述文件内容”
  2. 表示repo根目录的新树对象(指向新的blob对象)
  3. 我们可以在git log输出
  4. 中看到的新提交对象8d8f56d

    请注意,旧的提交对象2d02c36,d101a0e和与这些提交相关的树/ blob未发送,因为远程仓库已经有了这些提交。 请注意,如果在repo中有一个深层目录结构,即使只更新一个文件,也可能需要发送很多新的树对象,一个用于更改文件的每个父目录。