git fetch 做了些什么

git fetch 完成了仅有的但是很重要的两步:

  • 从远程仓库 下载 本地仓库中缺失的 提交记录
  • 更新远程分支指针(假设为 o/master)

git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态:

git fetch 通常通过互联网(使用 http:// 或 git:// 协议) 与远程仓库通信。

git fetch 不会做的事

git fetch 并不会改变你本地仓库的状态。它 不会更新你的 master 分支,也 不会修改你磁盘上的文件。

理解这一点很重要,因为许多开发人员误以为执行了 git fetch 以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。

所以,你可以将 git fetch 的理解为单纯的下载操作。

合并远程分支

当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支。也就是说就是你可以执行以下命令:

  • git cherry-pick o/master
  • git rebase o/master
  • git merge o/master

实际上,由于先抓取更新再合并到本地分支这个流程很常用,因此 Git 提供了一个专门的命令来完成这两个操作,它就是 git pull

git pull

git pull 就是 git fetch + git merge o/master

当你 想要 push 你的新提交时,发现远程仓库在你上次拉取以后已经又有了改变,也就是说你的新 commit 是基于旧提交的修改,这种情况下 Git 是不允许你进行 push 操作的, 你需要使自己的工作基于远程的提交,这个过程可以用以下命令:

  • git fetch; git merge o/master
  • git fetch; git rebase o/master
  • 最简单的当然还是 git pull -rgit pull --rebase 的缩写)

然后再 git push 就没问题了。

在开发社区里,有许多关于 merge 与 rebase 的讨论。以下是关于 rebase 的优缺点:


优点: rebase 使你的提交树变得很干净, 所有的提交都在一条线上

缺点: rebase 修改了提交树的历史。比如,提交 C1 可以被 rebase 到 C3 之后。这看起来 C1 中的工作是在 C3 之后进行的,但实际上是在 C3 之前。

一些开发人员喜欢保留提交历史,因此更偏爱 merge。而其他人可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。

git push

git push 负责将你的变更上传到指定的远程仓库。远程仓库中的 master 分支被更新,我们的远程分支(o/master)也同样会被更新。

未指定参数时,Git 是通过当前检出分支的属性来确定远程仓库以及要 push 的目的地的。我们可以为 push 指定参数,语法是 git push <remote> <place>。这句话的含义是:切到本地仓库中的 分支,获取所有的提交,再到远程仓库 中找到 分支,将远程仓库中没有的提交记录都添加上去,搞定之后告诉我。

如果不指定参数,且 HEAD 没有跟踪任何分支,git push 不会有任何响应:

要同时为源和目的地指定 的话,只需要用冒号将二者连起来就可以了 git push origin <src>:<dst>

注意如果 传了个空值过去,会删除该远程分支。

从远程库删除某些文件但保留本地的文件

有时我们会误把一些不必要的文件(如目标文件、log 日志等)提交并推送到了远程库,现在希望从远程库删除这些文件但保留本地的文件,可以像这样 执行:

git rm -r --cached dir1
git rm --cached dir2/*.pyc
git commit -m "remove irrelated files"
git push origin branch1

Git 本地与远程仓库同步操作相关推荐

  1. git 本地与远程仓库出现代码冲突解决方法

    git 本地与远程仓库出现代码冲突解决方法 参考文章: (1)git 本地与远程仓库出现代码冲突解决方法 (2)https://www.cnblogs.com/heaven-xi/p/9703566. ...

  2. Git本地连接远程仓库

    最近被git搞疯了,上来学习一下git,自己写写增加记忆 初始化远程仓库(复制连接) 本地新建文件夹,以后你的代码就是丢在里面了. 右击鼠标,选择 Git bash git init //初始化仓库  ...

  3. git 入门教程之本地和远程仓库的本质

    本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当&q ...

  4. git修改本地和远程仓库名称的解决方法

    git修改本地和远程仓库名称的解决方法 参考文章: (1)git修改本地和远程仓库名称的解决方法 (2)https://www.cnblogs.com/zlting/p/9620259.html 备忘 ...

  5. 【git学习】本地关联远程仓库

    目录 一.本地仓库关联远程仓库(新建仓库) 二.拉取远程分支到本地(已有远程仓库) 一.本地仓库关联远程仓库(新建仓库) 本地新建工程,然后关联远程git仓库并向远程仓库提交代码. 1.本地新建工程, ...

  6. git 无法 push 远程仓库 【Note about fast-forwards】

    git 无法push远程仓库 Note about fast-forwards 提出问题 基本介绍 解决方案 提出问题 git push 远程仓库时,经常报出如下错误,导致无法将本地仓库中的内容提交到 ...

  7. 使用git拉取远程仓库代码

    git拉取远程仓库代码 引言: 项目需要在阿里云里面拉取代码,本来以为自己会,结果好几歩都出错了,这里记录一下步骤 下载安装好git,打开Git Bash Here,进行初始化三步. 1.git in ...

  8. git添加/删除远程仓库

    注意:仓库只有管理员建的你才有权限上传,不然自己建的也没用,没权限上传 1.远程仓库路径查询 git remote -v 2.添加远程仓库 git remote add origin <你的项目 ...

  9. Git撤销对远程仓库的push 或 Git撤销对远程仓库的commit提交

    Git撤销对远程仓库的push 或 Git撤销对远程仓库的commit提交 [一]撤销push 执行 git log 查看日志,获取需要回退的版本号 执行 git reset –-soft <版 ...

最新文章

  1. 加快tensorflow模型预测速度
  2. 001 Servlet 介绍
  3. oracle 创交表,创建交叉报表(oracle)_oracle
  4. 原来在首席架构眼里MySQL果然如此不一样!
  5. mysql用户权限与安全实例_mysql用户权限管理实例分析
  6. python rindex()_Python3 rindex()方法
  7. 特殊字符搜索网站 http://symbolhound.com/
  8. 易语言超级列表框怎么设置文本颜色_抖音超火的快闪动画怎么做?手把手教你!三分钟学会...
  9. word设置多级标题样式及编号
  10. Java毕设项目银行贷款管理系统计算机(附源码+系统+数据库+LW)
  11. 【Python成长之路】卡萨帝冰箱能买吗?让数据来说话!
  12. 电力-平衡式101规约报文解析
  13. JS获取本地文件的内容
  14. WT2003H语音芯片在红绿灯上的运用,一款可远程更新的语音IC方案
  15. 基于 vue-element-admin 基础模板实现侧边栏菜单动态渲染
  16. CSS之border
  17. JS exports的用法
  18. DR/BDR选举过程及作用详解
  19. 优秀程序员的七大特征,你具备几条?
  20. Python 安装包管理工具 pip

热门文章

  1. 【MySQL 8.0 OCP 1Z0-908认证考试】题库精讲--第三讲mysql8.0安装配置升级(中)
  2. element中组件el-autocomplete远程搜索之精确匹配和模糊匹配
  3. Kinect v2 Examples with-SDK 提示 技巧和示例简介
  4. libevent库bufferevent事件实现socket通信
  5. Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
  6. 为什么你要拒绝我(苹果AppStore被拒理由大全)
  7. [转]活灵活现用Git--基础篇
  8. LivePlayer.js播放器遇到悬停英文提示如何切换显示成中文
  9. html设置flash自适应,SWF自适应布局技巧 (Rapid Flash Development)快速Flash开发
  10. python可以开发app吗-惊呆!那些顶级App居然是用Python开发的