【问题标题】:Git push all files to new branchGit将所有文件推送到新分支
【发布时间】:2019-02-26 04:04:19
【问题描述】:

每次我尝试将单个文件推送到新分支时,都将文件夹中的所有文件 git。 当我使用 git rm --cached -r . 从 repo 中删除所有文件并再次上传这个单个文件时,这很好。但是当我尝试将一些文件上传到另一个新分支时,它会推送新文件+上次推送的文件。

我使用了这个命令:

git init
git remote add origin master
git branch test
git checkout test
git add <file>
git commit -m "blahblah"
git push origin test

当然同时我使用git status 命令来检查当前文件,但它只显示我想要的 。我不知道为什么它会推送所有文件,而不仅仅是 .

【问题讨论】:

  • 你做了 git push -u origin test 把它推送到远程吗?
  • 这些是您唯一使用的命令吗?因为看起来你没有克隆任何东西,也没有从远程获取,所以你不会看到远程上已经存在的文件。通常的工作流程是克隆一个存储库(它会自动设置您的源远程)。然后在本地你可以删除所有文件并提交......

标签: git github


【解决方案1】:

Git 不推送文件。 Git 推送整个提交

提交是整个源代码树的快照:所有文件。这就是git push 传输的内容:一个或多个完整的快照。

当您使用 git checkout <em>branch</em> 时,Git 会将 branch 名称转换为特定的提交,然后将该整个提交(它的所有文件)提取到您的工作树。这就是提交的意义所在:它们代表一组所有组合在一起的文件。使用 file-set-A 在分支 A 上做事 A;使用不同的文件集-B 在分支 B 上执行 B;等等。如果文件集中存在某个分支 B 的当前提示的错误,则提取完整集,修复错误,添加修复,然后运行 ​​git commit 说:现在分支 B表示我刚刚进行的这个新提交——使用这些文件中的所有新提交表示执行 B 的新快照。

因此,git push 会推送您创建的所有新快照,而其他 Git 还没有这些快照。他们将新快照添加到他们的“所有快照”集合中。

注意push 的反义词是fetch,而不是pull!这个错误动词的事情是由于 Git 早期犯的一个小错误,我们现在都必须忍受。使用git pull 意味着运行git fetch,然后运行git merge这是git push 不会(也不能)做的额外步骤。我们获取,然后合并,然后推送;然后我们根据需要再次获取、合并和推送。 pull 动词将两者结合起来,但事实证明这两个动作之间通常有一些事情要做,或者不使用 merge。如果没有——当可以获取并立即合并时——然后git pull 更方便。但我建议先分开学习。

有关更多信息,一旦你准备好了,请参阅What does GIT PUSH do exactly?

【讨论】:

  • “提交是整个源代码树的快照:所有文件” AFAIK 提交是文件更改(变更集)的快照,就像增量一样。对不对?
  • @everton:不,Git 与其他 VCS 不同。就保存的文件而言,每次提交都独立于先前的提交。每个提交都会列出其父提交,并且通过将提交中保存的快照与每个父提交中的快照进行比较,我们可以计算变更集,但提交快照。 (练习:在有用性方面,一个接一个地存储增量链和一个接一个地存储快照之间有什么区别?这很重要的边界条件是什么?)
猜你喜欢
  • 2022-01-23
  • 2017-05-10
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多