ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

06-什么是 push

06-什么是 push 在之前的内容里粗略地说过push指令是把你的本地提交上传到中央仓库去用你本地的内容来覆盖掉远端的内容。这个说法其实是不够准确的但 Git 的知识系统比较庞大在你对 Git 了解比较少的时候用「上传本地提交」来解释会比较好理解而在你知道了branch并且明白了它的具体含义以后我就可以告诉你push到底是什么了。把 branch 上传到远端仓库实质上push做的事是把当前branch的位置即它指向哪个commit上传到远端仓库并把它的路径上的commits 一并上传。例如我现在的本地仓库有一个master它超前了远程仓库两个提交另外还有一个新建的branch叫feature1远程仓库还没有记载过它。具体大概像这样这时我执行git push就会把master的最新位置更新到远端并且把它的路径上的56两个commits 上传git push而如果这时候我再切到feature1去后再执行一次push就会把feature1以及它的commit4上传到远程仓库git checkout feature1 git push origin feature1这里的git push和之前有点不同多了origin feature1这两个参数。其中origin是远程仓库的别名是你在git clone时 Git 自动帮你起的feature1是远程仓库中目标branch的名字。这两个参数合起来指定了你要push到的目标仓库和目标分支意思是「我要push到origin这个仓库的feature1分支」。在 Git 中2.0 及它之后的版本默认情况下你用不加参数的git push只能上传那些之前从远端clone下来或者pull下来的分支而如果需要push你本地的自己创建的分支则需要手动指定目标仓库和目标分支并且目标分支的名称必须和本地分支完全相同就像上面这样。你可以通过git config指令来设置push.default的值来改变push的行为逻辑例如可以设置为「所有分支都可以用git push来直接push目标自动指向origin仓库的同名分支」对应的push.default值current或者别的什么行为逻辑你甚至可以设置为每次执行git push时就自动把所有本地分支全部同步到远程仓库虽然这可能有点耗时和危险。细心的人可能会发现在feature1被push时远程仓库的HEAD并没有和本地仓库的HEAD一样指向feature1。这是因为push的时候只会上传当前branch的指向并不会把本地的HEAD的指向也一起上传到远程仓库。事实上远程仓库的HEAD是永远指向它的默认分支即master如果不修改它的名称的话并会随着默认分支的移动而移动的。小结push是把当前的分支上传到远程仓库并把这个branch的路径上的所有commits 也一并上传。push的时候如果当前分支是一个本地创建的分支需要指定远程仓库名和分支名用git push origin branch_name的格式而不能只用git push或者可以通过git config修改push.default来改变push时的行为逻辑。push的时候之后上传当前分支并不会上传HEAD远程仓库的HEAD是永远指向默认分支即master的。
返回列表