Git远程:push / pull / clone / fetch / conflict

更多
2021年06月14日 13点52分 作者:叶飞 修改

注意之前所有操作,都是在本地(你自己的电脑上)进行的。要想和别人分享你的代码,你需要有一个远程仓库(一般放在github上):


publish和clone

publish

飞哥把:

  1. 在github上新建一个裸(bare)仓库
  2. 将本地仓库内容推送(push)到github裸仓库

的过程称之为publish。

其本质还是一个push的过程。

有些IDE(比如Visual Studio)会将publish过程合二为一,一次性执行。

clone

把github上面的仓库,复制/拷贝/弄到本地的过程,就是clone。

注意这个单词:clone

要想在两个仓库之间同步,仓库和仓库之间必须“基因”相同。

一定要理解:两个仓库(DNA)一样 ≠ 两个仓库里面的内容一样。

怎么才能相同呢?以下情形任选其一:

  1. A仓库是从B仓库clone的
  2. A仓库向一个从未被使用过的(bare,不是empty)B仓库推送
只有DNA相同的两个仓库之间才能进行同步操作。


同步(sync)

同步会首先比较远程repository和本地repository的差异。然后,

拉取(Fetch和Pull)

如果远程repository上有比本地repository上更“新”的更改,

@想一想@:这是怎么造成的?

本地就可以:

  • Fetch:获取更改到本地repository,但不更新本地工作区(飞哥也不知道这样有啥用,^_^,谨慎?先看看?)
  • Pull:获取更改到本地repository,同时更新(merge)本地工作区(pull=fetch+merge)

推送(Push)

如果本地repository上有比远程repository上更“新”的更改,

本地就可以通过push,将本地的更改直接推送到远程repository

先拉取再推送

我们来看更复杂一点的情形:

  1. 你clone/pull了远程仓库
  2. 你在本地commit,更新了本地仓库
  3. 在你做2的同时,张三往push了一些内容到远程仓库
  4. 当你想push本地仓库内容时,git会自动检查到张三的push,要求你先拉取再pull

冲突

拉取的过程中就可以产生冲突。比如同一个文件的同一行代码

  • 你写的是:飞哥真帅
  • 张三写的是:飞哥真衰

这时候git没法自动merge(是两个都要呢?还是一个覆盖另外一个?两个都要,谁在前谁在后呢?),就报一个冲突(conflict),让开发人员自行解决(resolve)。

开发人员需要更改工作区内容,然后再commit+pull,确定最终版本。



@想一想@:离职删库跑路有没有用?

git 远程 同步
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

编程基础


项目管理相关

需求发布、开发规划、部署、测试,源代码版本管理(git)等……

逸闻史话

认识计算机

编程语言

数据结构和算法

Web开发基础

全部
关键字



帮助

反馈