| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 【尚硅谷】Git与GitHub基础全套完整版教程-笔记2 -> 正文阅读 |
|
[开发工具]【尚硅谷】Git与GitHub基础全套完整版教程-笔记2 |
在【尚硅谷】Git与GitHub基础全套完整版教程-笔记1中有关于Git的简介,以及添加add、提交commit、撤回reset等命令。 下面先回忆一下上一篇文章的命令,以good.txt为例进行实际操作。 目录 0 回忆上篇文章的内容4.3.5 前进后退?(三方式)?git在管理历史版本时其实有一个指针,指针的名字叫“HEAD”,方便移动。前进和后退的本质是指针移动。 ???? 第一种:基于索引值操作[推荐使用这个方式] 现在指针指向离我们最近的记录。注意:git里面的代码选中就是复制,直接粘贴就好。代码格式:
实际操作代码:
第二种:使用^(异或)符号,只能后退。 代码格式:
实际操作代码:
第三种:使用~(波浪线)符号,只能后退
实际操作代码:
总结:后两个方法都需要去历史记录里数一下。git reflog可以查看所有的历史记录。 4.3.6 reset 命令的三个参数对比(查看命令帮助文档: git help reset)
--soft 参数 Does not touch the index file or the working tree at all.(不会碰暂存区和工作区) 仅仅在本地库移动?HEAD 指针?(查看状态时绿色提示:本地库和暂存区不同步) --mixed 参数 在本地库移动 HEAD 指针 重置暂存区 (查看状态时红色提示:本地库和暂存区后退,感觉是工作区前进了) --hard 参数? 在本地库移动 HEAD 指针,三个区域一起移动:重置暂存区和工作区。 4.3.7 删除文件并找回实际操作代码:
删除文件找回方式的小结 前提是删除前文件存在时的状态提交到了本地库。 实际操作代码:
找回操作:
删除操作已经提交到本地库:指针位置指向历史记录(回到之前未删除版本) 删除操作尚未提交到本地库:指针位置使用 HEAD(git reset --hard?HEAD) 4.3.8 比较文件差异比较文件的不同:
实际操作代码:
接着4 Git 命令行操作4.4 分支管理4.4.2 什么是分支?(1)在版本控制过程中,使用多条线同时推进多个任务。 版本库初始化之后,本身有master分支。 假设想开发一些新的功能,不想在master主干上进行开发,于是开取新的分支。新的分支feature_blue是从master复制过来的,刚创建的时候内容一致。想再开发一个功能,创建一个新的分支feature_game。两条分支各自开发。开发完成,测试没有问题,feature_blue分支可以合并到master。master可能出现bug,往往出现hot_fix分支,一般热修复(服务器上跑的项目不停止),紧急修复完再合并到master分支。等feature_game分支开发完,合并到master,master又是一个新的master。 (2)分支的好处?
4.4.3 分支操作?实际操作代码:
总结 o1创建分支: ?git branch [分支名]????/*例: git branch hot_fix o2查看分支: ??git branch -v o3切换分支: ??git checkout [分支名]???/*git checkout?hot_fix o4合并分支:? ?git merge [有新内容分支名]
o5解决冲突 冲突原因: 2个分支修改同一文件的同一位置,但是修改内容不一样时。
冲突的表现: 有当前分支内容和另一个分支内容??? 冲突的解决: 第一步:编辑文件,删除特殊符号 第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
5 Git 基本原理5.1 哈希(Hash)算法简介哈希是一个系列的加密算法,(对Hash来讲,明文不一定是文字,音频、视频、图片文件都可以)各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点: ①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。例如md5(32的十六进制数)、SHA1、CRC32。 ②哈希算法确定,输入数据确定,输出数据能够保证不变(同一个数据,不管什么时候执行,不管执行多少次,得到的结果一样)。 ③哈希算法确定,输入数据有变化(哪怕细微变化),输出数据一定有变化,而且通常变化很大。 ④哈希算法不可逆(根据密文无法反推明文) Git 底层采用的是 SHA-1 算法。 由于特点③,哈希算法可以被用来验证文件。原理如下图所示:(传输前后hash值对比) Git 就是靠这种机制来从根本上保证数据完整性的。(字母忽略大小写) 5.2 Git 保存版本的机制5.2.1 集中式版本控制工具的文件管理机制以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。例如,SVN。 每次只保存修改的那一部分,很好的节约内存空间。 5.2.2 Git 的文件管理机制Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件,所以 Git 的工作方式可以称之为快照流。 5.2.3 Git 文件管理机制细节(1)Git 的“提交对象”??(每个文件对应的hash值) 所有的hash值构成一个tree对象,包含hash值和对应的文件,它自己也有hash值。 提交对象包括tree对象,它自己也有hash值。
比特币和git里面的管理文件有非常大的相似点。比特币每一个做hash,然后两两做hash。 (2)提交对象及其父对象形成的链条 每一个版本,每一个快照,会有一个parent,会指向它的父节点。各个版本之间通过这个父子关系所建立的连接。“提交对象”里面还包括author信息和committer信息。 5.3 Git 分支管理机制5.3.1 分支的创建(就是新建一个指针)从数据结构上来说,这也是一个列表的结构。第一次提交有“root commit”。下面的master和testing都可以看成指针,指针指向某一个版本,创建指针比复制文件的效率高多了。 5.3.2 分支的切换?(HEAD指向)切换到testing分支,HEAD指针移动。如下图: HEAD指向testing时提交了内容。master留在原地,testing分支已经往前走了一步。如下图: 切换回 master,把HEAD指针重新指向master,如下图: ??? HEAD指向master时提交了数据,master往后移一步。如下图: 总结:分支是Git里面很重要的内容。下一篇文章介绍我们的账号管理。 说明:记录学习笔记,如果错误欢迎指正!写文章不易,转载请联系我。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/25 0:15:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |