前言
https://docs.github.com/zh/get-started/git-basics/set-up-git
引入
以 Minecraft 为例,我们设想一下这样一个场景:
- 首先,本地游玩 Minecraft 一定需要创建一个存档,这个存档会记录下你的游戏状态(Repository)
- 当你正在盖一个建筑,你想使用“结构方块”把这个建筑框起来,告诉系统我要把这部分存一下(Add)
- 当你正常退出游戏,系统保存了你的存档,你还复制了这份存档生成了一个快照副本,方便以后的某个时刻不满意想直接回退使用它,然后你意识到你得在某个地方写一个注释用于记录这个快照副本此时的进度,方便下次打开这个快照副本的时候知道从哪开始干(Commit)
- 你想大搞红石科技,但是你怕把原来的存档卡爆,于是你复制了一份同样的存档,原先的存档继续作为一个普通的建筑档,新复制的这个专门用于搞红石科技,这样即使新复制的这个炸档了也不会影响到原始的存档(Branch)
- 你在这个用于“实验”的存档中成功造好了红石科技,想把它搬回原始存档(Merge)
- 你玩的本地存档是单人模式,而你想玩服务器了!(Remote)
- 你把本地存档的建筑照搬到了服务器里(Push)
- 你把服务器的建筑照搬到了本地存档(Pull)
- 你在本地存档里坐标 (X:100, Y:64, Z:100) 的地方放了一块钻石块,但是服务器里同一坐标 (X:100, Y:64, Z:100) 放了一块岩浆。你想把服务器这个坐标的内容照搬到本地,就会发生冲突,需要你自己手动介入(Conflict)