借笑傲江湖学习Git,让Git不在枯燥乏味,还能让你笑傲Git
git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。因此学习Git是很有必要的!
文章目录
- Git的优势
- Git的安装
- Git的结构
- 本地库和远程库
- 本地库初始化
- 设置签名
- 基本操作
- 分支管理
- Git基本原理
- 本地库和远程库的交互
- SSH免密登录
Git的优势
- 大部分操作本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与Linux命令全面兼容
Git的安装
想要使用这么一个工具我们必须要安装Git工具,网上已经有很多关于Git安装的详细步骤,这里推荐一篇写的很详细的Git安装的详细教程(基于Windows版本的)
Git的结构
本地库和远程库
为了更好更形象的描述本地库与远程库的关系,我借鉴了B站老师的金庸小说《笑傲江湖》谈Git来方便大家理解。
有一个经理叫岳不群,手下有一个程序员叫令狐冲。某一天岳不群创建了一个本地库,为了能把本地库托管到远程,因此岳不群在代码托管中心创建了一个远程库,但是远程库是没有内容的,因此岳不群通过千里传送将本地库的内容推送(push)到远程库。岳不群觉得的自己的领悟能力不够,练习不了辟邪剑法。于是决定把如何炼成辟邪剑法推送给令狐冲让令狐冲来完成。令狐冲作为大弟子谨遵师命,令狐冲从远程库克隆(clone)工程到自己的本地库,当然克隆的同时也顺带把自己的本地库给初始化好了。经过一番努力令狐冲终于参悟了这本武功秘籍,在自己本地库的基础上进行修改,写了详细的注意事项以后提交到本地库,然后再通过自己本地库提交到远程库,但是岳不群对令狐冲设有防线(远程库是岳不群创建的),因此令狐冲不能直接提交本地库到远程库,令狐冲需要通过push来加入团队。令狐冲提交完成以后,岳不群通过pull拉取令狐冲的远程修改到自己的本地,这样就能实现团队内的协助操作。
某一天,岳不群发现辟邪剑法不香了,想研究葵花宝典。于是语重心长对令狐冲说:“冲儿啊!为师最近喜得武功秘籍一部,鉴于你上次表现还不错,为师决定借你看看这本武功秘籍。过几天为师会来问你领悟到的精髓的”。令狐冲很开心的收下了宝典,通宵看了两夜也没有一点启发。想着过几天师傅就要检查了,这不行得想想办法。于是,令狐冲想到了日月神教的东方姑娘(东方不败)让东方不败来帮助自己参悟。令狐冲找到东方姑娘,表明了来意,东方姑娘怎么会拒绝呢?当然豪爽的就答应了!
岳不群和令狐冲有自己的本地库,同时岳不群也有自己的远程库。东方不败为了帮助令狐冲,她将岳不群的远程库复制(fork)了一份,生成了一个新的和岳不群的远程库内容相同的远程库,然后她将这个复制的远程库下载到本地(clone),经过大量的修改后,再将自己的本地库的内容上传(push)到自己复制的远程库。东方不败想着帮兄弟就要帮到底,随后她向岳不群的远程库发送了一个拉起(pull request)的请求,经过岳不群的审核通过后。发现原来如此,毫不犹豫的将东方不败提交的内容进行合并(merge)了。然后,令狐冲和岳不群就可以从岳不群创建的远程仓库中拉取(pull)东方不败提交的内容了。这样也就实现了团队外的协助操作了!
本地库初始化
- 进入一个空的文件夹目录,鼠标右键打开git bash
- 输入命令
git init
,会发现创建一个.git的隐藏文件 - 通过
ls -la
查看当前文件下是否生成的隐藏文件 - 通过命令
cd .git/
进入该隐藏的文件夹
注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要乱改动
设置签名
作用:通过用户名和Email地址来区别不同开发人员的身份。
辨析:这里设置的签名和登录远程库的(代码托管中心)的账号、密码没有任何关系。
命令:
项目级别/仓库级别:仅仅在当前本地库范围有效
git config user.name '用户名'
git config user.email '用户邮箱'
信息保存目录:.git/.config
系统用户级别:登录操作系统的用户范围
git config --global user.name '用户名'
git config --global user.email '用户邮箱'
信息保存目录:~/.gitconfig
级别优先级:就近原则
- 项目级别优于系统级别,两者都有时,采用项目级别签名
- 如果只有系统用户签名,就以系统用户签名为准
- 二者都没有不允许
基本操作
- 状态查看操作
git status#查看工作区、暂存区状态
- 添加操作
git add 'file name'#将工作区的 新建/修改 添加到转存区
- 提交操作
git commit -m "commit message"#将暂存区的内容提交到本地库
- 查看历史记录操作
git log#查看历史提交参数git log --pretty==oneline#漂亮的显示历史记录git log --oneline#更简洁的显示历史记录信息git reflog#会提示回到之前的版本需要移动多少步指针
多屏幕显示方法:
空格:向下翻页
b:向上翻页
q:退出
- 前进后退
本质:移动HEAD指针
一、索引值法:
① 先查看记录对应的索引值
②在通过命令到相关的记录
git reset --hard '对应的索引值'
二、其它方法
git reset --hard HEAD^ #向后移动一步
git reset --hard HEAD^^ #向后移动两步
git reset --hard HEAD^^^ #向后移动三步git reset --hard HEAD~1 #向后移动1步
git reset --hard HEAD~n #向后移动n步
使用 ^ 和~只能实现版本的后退,并且后退几步就有几个该符号(^)。通过以上比较发现还是索引值法比较方便
- reset命令的三个参数对比
参数 | 作用 |
---|---|
- -soft | 仅仅在本地库移动HEAD指针 |
- -mixed | 在本地库移动指针的同时重置缓存区 |
- - hard | 在本地库移动HEAD指针,同时重置暂存区和工作区 |
- 删除文件并找回
前提:删除前,文件存在时的状态提交到本地库
因为Git进行操作时只会增加版本,而不会删除任何一个版本。因为历史记录没有删除,所以只要本地库没有删除就是可以退回到之前版本的。依旧是通过命令git reset --hard '相关版本的索引值'
- 比较文件差异
git diff [文件名] #将工作区中的文件和暂存区进行比较git diff [本地库历史版本][文件名]#将工作区的文件和本地历史记录进行比较#不带文件名,可以比较当前工作区的所有文件
分支管理
- 分支概念
在版本控制中,使用多条线同时推进多个任务。
在初始化本地库之后,本身会创建一个master分支(主干),某一天突然想重新创建一个新的功能,但是不想在master分支上进行开发(不想对它造成污染)。我创建了一个新的feature_blue分支来进行开发,创建时是从master分支复制过来的。另外,我又想开发一个功能。因此,我又创建了另外一个分支(feature_game)。会发现每个分支都是彼此独立的,各自向前开发,如果不合并各个分支之间是不会有任何影响的。如果在开发过程中遇到了bug,那么就需要及时进行修复bug。这个时候就又需要创建另一个hot_fix修复分支。
- 分支操作
操作 | 命令 |
---|---|
创建分支 |
git branch '分支名'
|
查看分支 |
git branch -v
|
切换分支 |
git checkout '分支名'
|
合并分支 |
①使用git checkout [被合并分支名] 切换到接受修改的分支上②执行git merge [有新内容的分支名]
|
分支冲突:
我在给master分支下创建提交了一个hello.py文件文件内容如下:
print('hello world')
print('hello python')
print('中国')edit by master
我在给git_fix分支下也修改了hello.py的内容如下:
print('hello world')
print('hello python')
print('中国')edit by git_fix1
但是当我将master分支合并到git_fix分支时会出现以下问题:
当我再打开hello.py文件时就发现了冲突的表现:
解决冲突:
① 编辑文件,删除特殊符号
② 把文件修改到自己满意的程度,保存退出
③ git add [文件名]
④ git commit -m ‘日志信息’
注意:使用git commit -m提交合并后的文件时,一定不能带具体的文件名
分支管理的本质是创建和移动指针
Git基本原理
- 哈希
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定(16个字节)
②哈希算法确定,输入数据确定,输出数据能够保证不变
⑧哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
④哈希算法不可逆
Git底层采用的是SHA-1算法
哈希算法可以被用来验证文件。原理如下图所示:
- Git版本数据管理机制
Git把数据看作是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作-个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,而是只保留一“个链接指向之前存储的文件。所以Git的工作方式可以称之为快照流。
本地库和远程库的交互
- 创建本地库
岳不群为了广大门楣,打开一个新的文件夹,给文件里创建了一个yuebuqun.txt的文件夹,文件夹内容如下:
壮大华山,称霸武林!
创建完成以后添加到暂存区,然后再提交到远程库
- 创建远程库
- 本地创建远程库别名
然后通过git remote -v命令查看 - 推送本地库到远程库
通过命令git push new_git master
推送本地库到远程库,需要输入github的账户和密码,然后点击Login,再进入远程库就看到了相关内容!
- 从远程库克隆项目
①完整的把远程库下载到本地
②创建new_git远程地址别名
③初始化本地库
命令:git clone [远程地址]
SSH免密登录
① 进入当前用户家目录 $ cd~
② 运用命令生成.shh密钥目录
$ ssh-keygen -t rsa -C ‘对应的邮箱’(注意:参数-C是大写的)
③进入.ssh目录查看文件列表
$ cd .ssh
$ ls -lF
④查看id_rsa.pub文件内容
$ cat id_rsa.pub
⑤复制id_rsa.pub文件内容,登录GitHub,点击头像——Settings——SHH and GPG keys
⑥New SHH Key
⑦输入复制的密钥信息
⑧回到Gitbash创建远程地址别名
git remote add new_git_ssh ‘对应的SSH链接’
不积小流无以成江河,不积跬步无以至千里。而我想要成为万里羊,就必须坚持学习来获取更多知识,用知识来改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论” “收藏”
三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那我祝你开心每一天,欢迎下次再来!
借笑傲江湖学习Git,让Git不在枯燥乏味,还能让你笑傲Git相关推荐
- Git学习(了解版本控制、Git安装配置、Git基本理论、Git搭建、Git文件操作、使用码云或Github、IDEA集成Git,Git分支开发)
学习git之前,我们需要先明白一个概念,版本控制! 版本控制 什么是版本控制 版本迭代,新的版本!版本管理器. 版本控制(Revision Control)是一种在开发的过程中用于管理我们对文件.目录 ...
- 前端学习(1853)vue之电商管理系统电商系统之git安装
1下载安装包 git官网: https://git-scm.com/download/win git阿里镜像: https://npm.taobao.org/mirrors/git-for-windo ...
- 常用Git指令|初入职Git指令学习|如何将Git项目拉至本地|如何将本地项目上传至Git|Ubuntu下Git环境配置|Ubuntu下如何利用VSCode使用Git指令
实习入职已经一个月了,整理一下自己常用的一些指令,供自己查阅,也可以供一些新入职朋友参考. 这条博客也会不定时更新. 2022.10.26更新Ubuntu环境下的Git配置,因为最近可能需要win,U ...
- git 改了一段代码不想要了_初识Git
如果给所有软件列出一个排行榜的话,那么Git定会名列前茅.Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管 ...
- 使用git推送代码到开源中国以及IDEA环境下使用git
2019独角兽企业重金招聘Python工程师标准>>> 在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多 ...
- 【Git、GitHub、GitLab】九 工作中非常重要的一些git用法
上一篇文章学习了 如何修改commit的message,点击链接查看:[Git.GitHub.GitLab]八 如何修改commit的message 注意:下面的'–' 都是两个'-'组成 本文介绍一 ...
- git pull 是到工作区还是暂存区_我把git想简单了
git 是开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.我们平时可能经常使用它,但是你真的了解 git 吗?先抛几个问题 git add 发生了什么?git 有哪些暂存区 ...
- git 上传项目到linux仓库_「成都校区」Git使用快速入门
Git使用快速入门 1.在Linux上安装Git 输入git命令,查询是否安装了git (1)如果是Debian或Ubuntu Linux系统,使用如下命令进行安装: apt-get install ...
- GIT如何查看本地分支与远程分支的关联配置(git branch --set-upstream)
为什么80%的码农都做不了架构师?>>> git本地新建一个分支后,必须要做远程分支关联.如果没有关联, git 会在下面的操作中提示你显示的添加关联.关联目的是如果在本地分支 ...
最新文章
- 记忆的天空:“崩塌型”记忆活动原理
- stm32搭建mqtt_STM32+ESP8266+AIR202基本控制篇-102-服务器基本搭建-安装MQTT软件(.Windows系统)...
- 教程干货——零基础创建简单的在线审批流程
- mysql c 多线程封装_mysqlConnectorC/C++多线程封装_MySQL
- Spring 事务原理和使用
- Linux C编程学习--main()函数简析
- 简述linux系统的安全性,Linux操作系统的安全性有哪些过人之处
- 队列C++ | 用链表实现队列_2
- 击溃音乐服务器第一人!周杰伦新歌首发,QQ音乐服务器一度崩溃
- java截取文件名.后的字符串
- java简单的小程序_编写一个简单的入门java小程序
- 计算机丢失lua51dll怎么修复,lua51.dll
- MYsql源码及其剖析
- 让数据分析更easy的选择—贪心科技AI商业数据分析课程深度测评
- U3D 场景快速搭建教程
- react中使用微信jssdk分享总结
- 分析1996~2015年人口数据特征间的关系并分析1996~2015年人口数据各个特征的分布分散状况
- Kotlin/DSL(Anko),原汁原味Kotlin开发Android---Activity Fragment与AnkoUI分离,强大的复用,更加便捷的开发
- 仪表板工具Stimulsoft Dashboards中的文本元素介绍
- matlab电子原件不能相连,Matlab电力电子仿真教程..ppt