一、安装Git
1.先去官网下载这个软件, 准备安装到本电脑中
2.根据自己电脑系统下载此软件到本机
(1)最好安装在C盘。注意!不要安装在中文路径下==
(2)查看安装是否成功: 在任意文件夹右键, 查看是否有Git Base Here 选项, 有就成功了
二、为什么要学习 GIT
-
玩游戏一条命通关难度大吗? 很大
-
所以我们是不是要适当存档? 是的
-
那从0开始一次性就能把代码都写完? 中间肯定不能出错? 不能
-
所以我们需要写一段代码, 就存档保存一下!
-
我们在写项目的时候, 每天想要保存一个版本, 如果手动管理
但是,这样做其实不太好, 会有如下问题
1.操作麻烦: 每次需要复制, 粘贴, 重命名, 占磁盘空间
2.命名麻烦: 起不好名字, 都不知道这个文件夹和上个文件夹比修改了什么
3.存储麻烦: 如果电脑/磁盘损坏, 项目文件容易丢失
4.合并麻烦: 如果自己写项目还好, 但是很多人合作一个项目, 往同一个文件夹合代码是一件费时费力的事情
2.解决方案: 使用git这个版本控制工具软件
git是一款免费、开源的版本控制系统 ,用于敏捷高效地处理任何或小或大的项目。
作用: 1.文件存档备份 2.文件版本管理 3.多人协同合作(自动合并)
三、认识Git
1.git的三个区域
(1)工作区: 处理工作的区域---在你电脑里看到的目录
(2)暂存区: 临时存放的区域---在.git文件夹内的index中 (二进制记录)
(3)本地git仓库: 最终的存放区域---版本库:指的整个.git文件夹 (也认为是本地仓库)
四、Git配置(用户名,邮箱,SSH公钥)
1.安装git软件后, 了解配置全局用户名和邮箱,以后提交时, 知道是谁提交的
git config --global user.name 你的用户名
git config --global user.email 你的邮箱地址
2.配置后, 可以运行如下命令查看是否成功
git config --list
3.生成密钥对,输入命令后按三次回车确定生成密钥
ssh-keygen -t rsa -C "邮箱地址"
然后打开我的电脑, C:\Users\用户\.ssh ,用VSCode打开这个带pub的文件,全选复制
打开自己的码云仓库, 码云(头像)>设置>安全设置>ssh公钥
点击确定,进行身份验证,就完成公钥配置了哦
最后一步,输入以下命令检测自己是否成功连接上码云
ssh -T git@gitee.com
五、Git分支
如果一个git仓库, 一个master分支上, 提交的记录很多, 什么功能都有, 不方便管理啊, 比如这样
会显得master (默认主分支) 显得很乱, 不方便管理/回退查找等, 功能越多, 项目越大, 越复杂。所以这个时候, 我们要在版本库里, 创建不同的分支, 来分别管理他们 (不同的分支之间, 是互相独立的)
编写相关业务, 先切换到版本库下的对应不同分支, 去写业务, 然后暂存, 提交, 都会在对应分支下, 产生提交记录, 不会影响到别的分支 。等某个模块开发完毕后, 可以把某个子分支的代码, 合并回到master主分支中, 项目开发完毕, 主分支里最有一次提交的记录就是我的完整项目。
5.2 分支的本质
1.分支其实就是一个叫HEAD的指针标记
2.每次代码提交, 此HEAD指针都会往后移动一次, 保证指向的(并且工作区里的)都是最后一次提交
3.比如刚才我们第二次提交后, HEAD指针指向这里, 也是工作区最后一次提交的版本
当我们敲击命令 git reset --hard a3bcab2 那么HEAD指针会移动,而且HEAD移动后, 会影响工作区里的代码
5.3 创建分支
-
现在已经有了"登录"和"主页"了, 我们来创建一个"注册"分支reg
-
创建分支命令如下, 语法↓
# 创建分支 git branch 分支名
-
注意: 创建后不会自动切换分支, 我们可以运行命令查看现在这个.git版本库里所有分支
# 查看当前版本库所有分支 git branch # 绿色带*代表, 你现在所处的分支
手动切换到分支上, 命令语法↓
==注意: 第一次创建并切换到此分支==, 这里你会发现master分支上的所有代码(和当前节点所有提交记录) 都被复制了过来, 在这个基础上, 接着往后开发就行, 不是你的页面不同碰!!
# 切换分支命令 git checkout 分支名
刚才操作后的结果图示:
5.4 分支下开发流程
1.那我们现在就可以在当前reg分支下来编写, 注册页面的逻辑代码, 例如新建reg.html文件, 并随便写点内容
2.然后暂存, 提交一次, 这次提交的记录会出现在这里, 如图
3.所以, 以后在当前reg分支下开发, 就会在reg范围内, 每次提交产生一次版本记录, 但是不会影响到别的分支里
4.其实, 我们如果用的是git专用终端, 还可以在这里看到所在分支的名字
5.5 分支合并
1.当我们某个分支的业务开发完毕以后呢, 我们可以把分支里写好的代码, 合并到主分支/其他分支上。首先, 切换到你要合并到的目标分支上, 这里以master主分支为例
切换分支 git checkout master
2.合并命令语法:把目标分支名下的所有记录, 合并到当前分支下 git merge 目标分支名
git merge reg
5.6 分支解决冲突
当我们在2个分支, 修改了同1个文件并==提交过== 再==合并==的时候, 就会产生冲突
先模拟一次冲突的制造
在master分支下, 修改login.html的某行代码, 并完成一次暂存提交;
切换到reg分支下, 也修改login.html的对应行代码, 并完成一次暂存提交
再切换回到master分支下, 用合并命令, 把reg分支下代码和变化合并过来
vscode中冲突的代码会长这样
这个时候, 要积极寻找对方是哪个人, 然后商量, 留下谁的? 手动删除掉<<<<<<和=和>>>>>>>>后, 重新暂存提交, 完成冲突解决
接着我们, 暂存提交一次
5.7 删除分支
1.假如注册功能开发完毕, 代码已经合并到master分支上, 我们无需reg分支
命令如下
git branch -d 分支名
如果你当前分支代码 还有没合并到别的分支的, 则会报错
2.git全局配置删除命令
user.name 可以视情况删除哪个自己选
git config --unset --global user.name
5.8 git版本回退更多
如下命令
# 除了找到对应版本号之外, 我们还可以用内置的代号 # 回退到 "最近一次提交" (但是要注意如果你已经回退了, 是回不到未来的, 回到未来需要指定版本号数字字母) git reset --hard head~0 # 回退到 "上一次提交" git reset --hard head~1 # 回退到 "上上次提交" git reset --hard head~2 # 想退多少次, 先用git log --oneline 打印后根据注释信息, 自己数下回退几次 head~后面写几
以上命令还有个写法
# 回退到 "上一次提交" git reset --hard head^ # 回退到 "上上次提交" git reset --hard head^^ # 如果回退的太远, 一百个往前, 你不能写一百个^吧, 还是写head~个数吧
5.8.2 git版本回退-更优解:
reset其实会把未来的丢失掉, 如果推到远程仓库可能会有问题 (看下面情况做吧), 但是其实保证大家维护的同一个项目工程都是最新代码即可
比reset更好用的revert
5.9 git常用忽略配置
六、Git基础命令
新文件夹 / 现有文件夹, 运行如下命令, 得到.git文件夹, 即可让git开始准备管理
(1)初始化 git 仓库
git init
(2)一次性把所有变化文件, 放入暂存区
注意: add 后面有个空格, 此.的意思 , 当前目录下所有变化都暂存
git add .
(3)把暂存区内容, 提交到版本库, 命令如下
git commit -m '提交的内容说明'
(4)查看所有提交的日志记录, 命令如下
git log
(5)当我们的日志越来越多, 可能想要简化查看, 可以输入如下命令
git log --oneline 在一行显示简略信息
(6)如果改的代码过多, 忘记改过哪些了, 可以运行如下命令, 查看git仓库变化
git status
(7)回退命令语法如下,
git reset --hard 版本号
(8)查看 git 所有的操作记录, 包括你的reset记录
git reflog
(9)忽略规则
有的时候, 我们某些文件/文件夹, 不想让git进行跟踪管理这种场景下, 我们需要在.git文件夹隔壁, 来个叫做 .gitignore (固定名字)的忽略文件, 并写入忽略规则
可以编写如下这些规则
# 忽略某个指定文件 password.txt # 忽略文件夹 css # 忽略文件夹下的某个文件 css/index.js # 忽略文件夹下某类文件 css/*.js
(10)创建分支
创建分支命令如下
git branch 分支名
(11)手动切换到分支上
==注意: 第一次创建并切换到此分支==, 这里你会发现master分支上的所有代码(和当前节点所有提交记录) 都被复制了过来, 在这个基础上, 接着往后开发就行, 不是你的页面不同碰!!
# 切换分支命令 git checkout 分支名 # 创建并切换分支 git checkout -b 分支名
(12)合并命令语法
# 把目标分支名下的所有记录, 合并到当前分支下 git merge 目标分支名
(13)删除命令如下
git branch -d 分支名