同步GIT仓库的操作 -- push命令

git push命令用于向远程仓库上传本地仓库的内容。push操作就是将本地的commit打包上传到远程仓库中。与之对应,git fetch操作向本地分支导入commits,push操作则向远程分支导出commits。远程分支通过之前文章中提到的git remote命令进行配置。push操作有可能会覆盖远程的变更,因此操作时需要谨慎行事。关于这个话题下面会有更详细的讨论。

Git push用法

git push <remote> <branch>

上面的命令会将特定的分支推向远程仓库,同时push的还有分支中包含的commits以及git内部对象。这将会在远程仓库中创建特定分支。为了避免这次推送覆盖远程仓库的commits,当其相对于远程仓库的对应分支不能进行快速前进(non-fast-forward)合并时,Git则不允许这次推送。

git push <remote> --force

与前一条命令相同,但是当遇到不可快速前进的合并时,此次推送仍将强制进行。因此,除非你真的很清楚自己在做什么,否则不要使用--force选项。

git push <remote> --all

将本地所有分支都推送给特定的远程仓库。

git push <remote> --tags

当使用--all选项推送所有本地分支时,tags并不会被自动推送到远程仓库。因此使用--tags选项来向远程仓库推送所有本地tags。

关于Git push的讨论

git push最常用的场景是将本地的修改发布到中心仓库。对本地仓库的内容进行修改之后,执行push操作以便向其他团队成员共享这些修改。

01 Git push discussion.png

上面的图例展示了当本地的main分支的更新比中心仓库的main分支超前时,执行git push origin main命令向中心仓库发布这些更新的状况。请注意观察,在本地执行git push命令推送到远程仓库,本质上和在远程仓库执行git merge main的效果是一致的。

Git push和同步仓库

git push命令是Git同步流程中很多组件之一。通过git remote命令配置远程仓库之后,使用git提供的这一组同步命令对配置之后的远程仓库分支进行操作。git push命令可以被看作是上传commits,相反git fetchgit pull命令则可被看作是下载操作。一旦版本更新被上传或者下载操作同步之后,在相应的仓库内就可以使用git merge命令来集成这些更新。

强制push

当Git发现push操作会覆盖中心仓库的提交历史,从而导致不能快速前进(non-fast-forward)的合并时会阻止这次操作。因此当远程的提交历史已经和你本地的提交历史发生偏离,你需要先从远程仓库使用git pull命令拉取最新的变更,并将它们git merge到本地,然后再进行git push操作。

--force选项会无视上述行为,并且强制让远程仓库分支匹配本地分支,具体的方式是删除上次同步远程仓库之后,在远程仓库发生的所有变更。只有在一种场景下需要使用--force进行push操作,那就是当你发现你刚刚的提交不太对,于是马上使用git commit --amend进行了修改,或者是使用可交互式rebase命令之后。但仍然需要注意一点,在你使用--force选项之前,请一定确定你的其他团队成员没有pull过刚才的那些提交。

示例

默认git push

以下示例描述了一套向中心仓库发布本地仓库变更的标准流程。首先,通过git fetch同步中心仓库main分支在本地的副本,以确保本地副本是最新的,之后通过git rebase操作将分支的修改变基到远程main分支的提交历史之上。可交互的rebase操作(rebase -i)同时也是在分享给其他团队成员之前,清理本地commit记录的好机会。紧接着,git push命令将所有本地的提交都发送向中心仓库。

git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main

由于我们已确保本地的main分支是最新版本的,因此push操作是能够快速前进的。此时git不会阻止push操作。

修正之后的force push

git commit命令接受--amend选项,这一操作可以用来修改上一次的提交。类似这样的提交通常会修正并更新commit message,或者增加新的修改。一旦一次commit被修正之后,git push会直接失败,因为Git认为修正之后的commit与远程仓库的commit发生了偏离。此时--force选项就需要粉墨登场了。

# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main

上面的示例刚刚执行过一次commit并推送给了远程仓库。之后的git commit --amend命令用来更新上一次提交。修正之后的commit需要使用--force选项才能推送到远程仓库。

删除一个远程分支或者tag

有时为了清理仓库或者更好的组织分支结构,需要对分支进行删除操作。要想完全删除一个分支,不仅要在本地删除,还要在远程同步删除。

git branch -D branch_name
git push origin :branch_name

上面的命令首先删除了名为branch_name的远程分支,然后使用git push将这次删除同步给远程仓库。注意这一push操作中,会在分支名称前加一个 :前缀,以便通知远程仓库删除远端的同名本地分支。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容