Git将所有文件推送到新分支

时间:2018-09-21 17:58:28

标签: git github

每次我尝试将单个文件推送到新分支时,都将文件夹中的所有文件混在一起。 当我使用git rm --cached -r .从存储库中删除所有文件并再上传一次时,就可以了。但是,当我尝试将一些文件上传到另一个新分支时,它会推送新文件+上次推送的文件。

我用了这个命令:

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命令来检查当前文件,但是只显示了我想要的。我不知道为什么它会推送所有文件,而不仅仅是

1 个答案:

答案 0 :(得分:0)

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

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

当您使用git checkout branch时,Git会将 branch 名称转换为特定的提交,然后提取该整个提交 –文件-进入您的工作树。这就是提交的重点:它们代表了所有一起的文件集。使用文件集A在分支A上执行操作A;使用不同的文件集B在分支B上执行B事务;等等。如果文件集中存在某个错误,而该错误是某个分支B的当前提示,则提取完整的错误集,修复该错误,添加修复,然后运行git commit说: Now分支B表示我刚刚使用这些文件的全部进行了此新提交。新提交表示执行B任务的新快照。

因此,git push将推送您创建的所有其他Git尚未拥有的所有新快照。他们将新快照添加到“所有已创建快照”的集合中。

请注意,push的对立面是fetch,而不是pull!这个错误动词是由于Git早期犯了一个小错误,我们现在必须忍受这个错误。使用git pull意味着先执行git fetch,然后再运行git merge。这是git push不(也不能)执行的额外步骤。我们先获取,然后合并,然后推送;然后我们根据需要提取,合并并再次推送。 pull动词将两者结合在一起,但事实证明,在这两个动作之间经常有事情要做,或者代替使用merge。如果没有(可以立即合并),则 then git pull更为方便。但是我建议一开始要单独学习它们。

有关此内容的更多信息,一旦您准备好,请参见What does GIT PUSH do exactly?