【转载】GIT教程 猴子都能懂得git入门
完整官方承认教程
猴子都能懂得git入门
https://backlog.com/git-tutorial/cn/
GIT
入门
GIT与其他的区别
git是一个开源的分布式版本控制系统,用以快速高效的处理项目从很小到非常大的项目的版本控制的所有事情。
直接记录快照,而非差异比较
Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。 这类系统(CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。存储每个文件与初始版本的差异,如下图所示 -
Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。如下图所示 -
这是 Git 与几乎所有其它版本控制系统的重要区别。 因此 Git 重新考虑了以前每一代版本控制系统延续下来的诸多方面。 Git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的 VCS。 稍后我们在 Git 分支讨论 Git 分支管理时,将探究这种方式对待数据所能获得的益处。
修改记录的提交
1 系统按时间顺序记录
2 系统通过计算得到40位英文+数字命名用来指定提交文件。
3执行提交时,系统会要求输入提交信息。请务必输入提交信息,因为在空白的状态下执行提交会失败的
共享远程数据库
克隆(clone)
进行克隆(Clone)操作就可以复制远程数据库。
拉取(Pull)
进行拉取(Pull) 操作就可以把远程数据库的内容更新到本地数据
推送(push)
需要在Git执行推送(Push)操作。执行Push之后,本地的修改记录会被上传到远程数据库。所以远程数据库的修改记录就会和本地数据库的修改记录保持同步。
工作树和索引
在数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域
索引区域是用于单独提交文件
不加入索引区域无法提交
高级
什么是分支
分支是为了将修改记录的整体流程分叉保存。分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改。
分叉的分支可以合并。
为了不受其他开发人员的影响,您可以在主分支上建立自己专用的分支。完成工作后,将自己分支上的修改合并到主分支。因为每一次提交的历史记录都会被保存,所以当发生问题时,定位和修改造成问题的提交就容易多了。
master分支
在数据库进行最初的提交后, Git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。
分支的运用
分支分为 Merge分支 和 Topic分支
Merge分支
用于随时发布版本的分支,一般使用master分支当作Merge分支使用,为了版本稳定merge分支不进行修改,而是创建Topic分支进行修改。Merge分支只用于Merge发布稳定版本。
Topic分支
Topic分支是为了开发新功能或修复Bug等任务而建立的分支。若要同时进行多个的任务,请创建多个的Topic分支。
Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支
分支的切换
若要切换作业的分支,就要进行checkout操作。进行checkout时,git会从工作树还原向目标分支提交的修改内容。checkout之后的提交记录将被追加到目标分支。
Stash(贮藏)
还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况下切换到其他的分支时,修改内容会从原来的分支移动到目标分支。
但是如果在checkout的目标分支中相同的文件也有修改,checkout会失败的。这时要么先提交修改内容,要么用stash暂时保存修改内容后再checkout。
stash是临时保存文件修改内容的区域。stash可以暂时保存工作树和索引里还没提交的修改内容,您可以事后再取出暂存的修改,应用到原先的分支或其他的分支上。
HEAD
HEAD指向的是现在使用中的分支的最后一次更新。通常默认指向master分支的最后一次更新。通过移动HEAD,就可以变更使用的分支。
解决冲突
可识别冲突内容
无法识别冲突内容
分支合并
完成作业后的topic分支,最后要合并回merge分支。合并分支有2种方法:使用merge或rebase。使用这2种方法,合并后分支的历史记录会有很大的差别。
Merge
快速合并:是merge没有修改没有冲突 直接合并到当前分支
合并前
合并后
融合合并:master分支如果分叉后修改,要把master分支的修改内容和bugfix分支的修改内容汇合起来。
融合前
融合后
执行合并时,如果设定了non fast-forward选项,即使在能够fast-forward合并的情况下也会生成新的提交并合并。
Rebase(衍合)
rebase方法进行分支合并,会出现下图所显示的历史记录。现在我们来简单地讲解一下合并的流程吧。
合并前
合并后
首先,rebase bugfix分支到master分支, bugfix分支的历史记录会添加在master分支的后面。历史记录成一条线,相当整洁。
Rebase需要解决冲突
rebase之后head的位置不变,需要合并master分支head才会移到bugfix这里
两种方式区别
- merge
保持修改内容的历史记录,但是历史记录会很复杂。 - rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。
topic分支和merge分支的运用实例
B版本已经完毕还没打包,需要保存当前状态,开发新功能开新分支(蓝O)开发新功能
开发新功能的时候发现B版本里面有BUG需要修改,在B上面创建新的分支(紫X)
B版本准备打包将修改BUG的X 版本与B版本合并生成C版本
开发新版本是发现之前的BUG影响了新功能需要C版本,将新版本REBASE后继续开发,C版本可继续打包。
Rebase后继续开发。
完整官方承认教程
猴子都能懂得git入门
https://backlog.com/git-tutorial/cn/
【转载】GIT教程 猴子都能懂得git入门相关推荐
- 猴子都能懂得Git(入门篇汇总版)持续更新中~~~
文章目录 前言 一.Git的基础 1.Git是什么? 2.管理历史记录的数据库 远程数据库和本地数据库 创建数据库 修改记录的提交 工作树和索引 2.安装Git 初期设定 新建数据库 提交文件 pus ...
- 【Git 教程(5)】 Git基本操作
Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作介绍. 获取与创建项目命令 git init 用 git init 在目录中 ...
- 一份你女朋友都能读懂的 Git 教程,还不赶紧学起来!
点击上方"IT平头哥联盟",选择"置顶或者星标" 你的关注意义重大! 用游戏的方式来学习,是一种有趣而高效的方式. 从刚接触电脑时的打字练习软件 金山打字通,到 ...
- 史上最简单的git教程|第九篇:分支管理工具
在上一篇我们讲到了如何创建合并分支.如何解决冲突以及如何删除分支,那么接下来我们将讲到一些常用的分支管理工具. 获取所有分支列表: $ git branch * b1master 可以看书一共有两个分 ...
- Git教程1-生存篇
Git教程1-生存篇 前言 Git 工具链 Git服务器 场景假设 道具准备 剧情 具体步骤 建仓 拷仓 改仓 移仓 查仓 一些其他的经验 前言 作为一个嵌入式工程师,一直都想掌握git这个版本管理神 ...
- 深入浅出Git教程(转载)
目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式版本控制 1.5 ...
- 深入浅出Git教程+一个小时学会Git(转载)(堪称完美)
转载自: https://www.cnblogs.com/best/p/7474442.html#!comments 目录 一个小时学会Git 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1 ...
- 转载:廖雪峰经典:史上最浅显易懂的Git教程!
从零起步的Git教程,让你无痛苦上手世界上最流行的分布式版本控制系统Git! 既然号称史上最浅显易懂的Git教程,那这个教程有什么让你怦然心动的特点呢? 首先,本教程绝对面向初学者,没有接触过版本控制 ...
- git基础教程(28) 猴子偷桃,git cherry-pick采樱桃
提示:本文经奇妙之二进制二次编辑和审核, 修正了一些错误,包括但不限于错别字,语句不通顺,代码编译不过,命令书写错误,图片缺失,排版优化等. 文章目录 一.基本用法 二.转移多个提交 三.配置项 四. ...
- 分布式版本控制系统 Git 教程
简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...
最新文章
- multiprocessing.manager管理的对象需要加锁吗_iOS内存管理布局-理论篇
- python超神之路:Python3 列表list合并的4种方法
- [react] react的书写规范有哪些
- 苹果发布iOS/iPadOS15.1正式版 新增同播共享等功能
- 银行招聘考试题库计算机,2019银行招聘计算机试题(一)答案
- 关于@media不生效的问题和meta总结
- android ems的作用,对话框主题活动中忽略android:minEms
- mysql如何让自增id从1开始设置方法
- 在设计四人抢答器中灯全亮_EDA课程设计—四人抢答器设计
- 3DMax环境贴图无法正常显示的一种解决方法
- 爬虫实战 ——百度翻译
- 对接微信支付退款证书之坑
- HBuilderX配置自动格式化,统一代码规范
- html将图片保存到文件夹,怎么把一张网页上的全部图片都保存到文件夹里
- 在MacOS下通过brew link切换golang版本
- python制作简单动画_让数据动起来!用python制作动画可视化效果,让数据不再枯燥!...
- Google Earth Engine——从Python中的经纬度坐标获取Modis正弦图块网格位置
- ajax异步请求刷新
- 巨头争相布局的AI医疗,随着热潮褪去AI赛道会变宽松点吗?
- 微机原理DOSBox安装与使用
热门文章
- 微软推补丁服务器,[图]微软再推稳定性补丁 为即将到来功能更新做准备
- AE插件自动创建图层工具LayerGenerators使用教程
- 前端开源实战项目推荐
- Linux下安装配置maven
- 计算机基础854哈工大,854计算机基础大纲
- 下载各种版本的weblogic
- 量子计算机可以预测未来吗,这台量子计算机可以同时预测16种不同的未来
- Office | Office365 离线安装包选择安装word、ppt、excel
- 软件项目管理 1.2.PMBOK与软件项目管理知识体系
- 磁盘不见了只剩一个c盘_电脑硬盘分区不见了怎么恢复数据?