push就是把你本地仓储的commit传到远程仓储中去.
用法
git push <remote> <branch>
push指定的分支到<remote>中去. 如果对于目标仓储来说不是一次fast-forward的merge, push会失败. 需要先git pull.
git push <remote> --force
效果基本上和前一个命令相似, 但是他不管是不是fast-forward的merge都会push成功. 不建议使用这个命令.
git push <remote> --all
push本地仓储中所有的分支到<remote>.
git push <remote> --tags
当你push一个分支或者使用--all push时, tag不会自动被push. --tag标签会把你本地的所有tag传到远程仓储中去.
讨论
git push最多的使用目的就是把你的本地的修改发布到中央仓储中去. 你可以先rebase -i, 然后把你的本地commit发布到中央仓储中去.
注意了git push后, 远程仓储也merge了你的master.
Force push
当对于<remote>来说不是一个fast-forword的merge时, Git通过拒绝push来防止覆盖中央仓储的历史.因此当远程历史和你的历史有分叉的时候, 你需要先pull, 然后再尝试push.
--force标识会忽略fast-forward merge这个前提, 通过删除上游的修改(你最后一次pull的修改)来使得远程仓储分支和你本地的匹配. 希望你永远都不需要使用push --force.
只Push给裸仓储
只Push给裸仓储. 因为push会使得远程仓储的结构发生改变, 会妨碍别人开发. 裸仓储没有工作目录, 因此不会受到影响.
例子
首先通过fetch中央仓储并rebase你的修改在最新来确保你本地的master是最新的. 交互式的rebase还是在共享你的commit之前整理他们的机会. 然后, 使用push把你本地master的commit发送至中央仓储.
git checkout master git fetch origin master git rebase -i origin/master # Squash commits, fix up commit messages etc. git push origin master