目录
1 git命令与状态
1.1 常用git命令
1.2 不那么常用的git命令
1.3 常见状态
2 一些概念
2.1 版本控制
2.2 git简介
2.3 开源许可协议
3 常见git操作
3.1 下载git
3.2 安装git
3.3 配置用户信息
3.4 初始化仓库
3.5 查看git仓库状态
3.6 将文件添加到缓存区
3.7 提交暂存区内的所有文件
3.8 对已提交的文件进行修改
3.9 还原git仓库中所保存的版本
3.10 将所有文件都加入暂存区
3.11 取消已暂存的文件
3.12 跳过暂存区直接提交到git仓库
.13 从git仓库移除指定文件
3.14 从git仓库与工作区中移除指定文件
3.15 git忽略文件
3.16 查看提交历史
3.17 将项目回退到指定版本
4 gitee
4.1 常用功能
4.2 创建空白仓库
4.3 上传文件至仓库
4.3.1 HTTPS上传文件至仓库
4.3.2 SSH上传文件至仓库
4.4 将远程仓库克隆到本地
5 分支
5.1 查看所有分支
5.2 创建新分支
5.3 切换分支
.4 创建并切换新分支
5.5 合并分支
5.6 删除分支
5.7 合并时发生冲突
5.8 将分支推送到远程仓库
5.9 查看远程仓库所有分支列表
5.10 将远程分支下载到本地分支
5.11 从远程仓库拉取最新的代码
5.12 删除远程分支
1 git命令与状态
1.1 常用git命令
- git init 将当前目录转化为git仓库
- git statue -s 已精简的方式查看仓库状态,等同于git statue --short
- clear 清空终端显示结果
- git add . 添加该路径下的所有文件到暂存区
- git commit -m "描述提交信息" 提交暂存区的所有文件,-m如果不写会麻烦些,而且打几个空格是不会生效的,所以每一次提交必须写一点儿什么
- git reflog --pretty=format:"%h | %an | %ar | %s" 简要查看所有版本情况
- git clone 仓库地址 将仓库克隆到本地
- git remote add 仓库名 仓库地址 关联远程仓库,比如 git remote add origin git@gitee.com:Suyuo/css-notes.git
- git push -u 仓库名 分支名:远程仓库分支名 将本地仓库推送到远程仓库,:远程仓库分支名可以不写,比如 git push -u origin master
- git pull 在远程仓库中获取分支最新代码并搞到本地
1.2 不那么常用的git命令
- git config --global user.name "用户名" 设置用户名
- git config --global user.email "邮件地址" 设置右键地址
- git config --list --global 查看所有全局配置项
- git reset HEAD . 移除暂存区的所有文件
- git help 可以查看git的帮助,一般应该不会看这个,直接去百度看了。如果想查看config相关的帮助可以使用git help config,之后会跳出一个config信息相关的网页。也可以使用git config -h 获取简洁的帮助信息
- git config user.name 查看指定的全局配置项,前面那个是查看用户名,如果要查看email就是user.email
- git statue 查看git仓库状态
- git add 文件名 添加路径下指定的文件到暂存区
- git checkout -- 文件名 还原git仓库中所保存的版本,两个横杠与文件名之间有个空格
- git reset HEAD 文件名 取消指定已暂存的文件
- git commit -a -m "描述提交信息" 跳过暂存区直接提交到git仓库
- git rm --cached 文件名 从git仓库移除文件
- git rm -f 文件名 从git仓库与工作区中移除指定文件
- git reset --hard 版本哈希值 选择指定的版本
- git clone 远程仓库地址 将远程仓库克隆到本地
- git branch 查看所有分支列表
- git branch 分支名 创建新分支
- git checkout 分支名 切换到指定的分支
- git checkout -b 分支名 创建并切换到新创建的分支
- git merge 分支名 合并分支
- git brance -d 分支名 删除分支
- git remote show 远程仓库名称 查看远程仓库分支
1.3 常见状态
- 两个红色的问号 未处理
- 绿色的A 已暂存
- 红色的M 提交后又进行了修改,未加入暂存
- 绿色的M 提交后又进行了修改,已加入暂存
- 绿色的D 提交后从仓库移除的文件,且在缓存中
- 两个红色的U 合并冲突
2 一些概念
2.1 版本控制
如果将项目的所有文件都存在本地,有这么几个缺点
- 无法多人同时对项目文件进行修改,每个人修改后再粘贴进去比较麻烦
- 如果不写文档,无法得知具体做了那些修改
为解决种种的不方便可以使用版本控制软件,版本控制软件基本分为 本地版本控制系统,集中化版本控制系统与分布式版本控制系统,总的来讲分布式优于集中化,集中化优于本地
关于版本控制的更多理论可以看一下视频 01.版本控制的概念_哔哩哔哩_bilibili
2.2 git简介
git是版本控制软件之一,属于分布式版本控制系统。
区域分为工作区,暂存区与Git仓库。
状态分为 已被git管理与未被git管理。
已被git管理中包含三种状态,分别是已修改,已缓存,已提交
关于git详细介绍看一下这个 黑马程序员AJAX零基础到精通_整合Git核心内容全套教程_哔哩哔哩_bilibili P77-P78
2.3 开源许可协议
有很多开源许可协议,我们主要了解其中两种常见的协议需要注意的点
GPL
- 不允许修改后和衍生的代码作为闭源的商业软件发布和销售
- 如果你使用的GPL协议的源码,你的项目也必须遵循GPL
Linux遵循GPL协议,按照道理来讲,你使用了GPL的开源内容,你的项目就不许卖钱了
MIT
- 在修改后的代码或发行包中,必须包含作者的许可信息
像jQuery,Node.js都遵循MIT协议,当你使用了MIT的开源内容,你的项目卖出去后需要包含人家原作者的信息
3 常见git操作
3.1 下载git
之后下载一个git,地址 Git
我的是64位,我就选64位了
3.2 安装git
next
选择安装路径后点击next
next
next
右键任意文件夹空白处可以看到Git GUI Here与Git Bash Here就代表git安装成功了
3.3 配置用户信息
- git config --global user.name "用户名" 设置用户名
- git config --global user.email "邮件地址" 设置右键地址
用户名和邮件地址都是字符串,自己随便写就行,如果使用了--global那么在该机器上可以一直生效,我们搞一下,随便找个地方点击右键,然后点击Git Bash Here
点击后会显示一个终端
之后设置用户名为 Suyu
之后设置邮箱
git的配置会存在 C:\Users\MSI(计算机用户名)文件夹下的.gitconfig下
我当前的内容是这样的,下面credential gitee是我以前用过的痕迹
可以通过命令查看所有全局配置项
3.4 初始化仓库
初始化仓库就是自己的本地目录转换成git仓库,我们现在在这个目录下初始化一个git仓库
在当前目录下的空白处右键,然后点击git Bash打开git终端,之后输入git init
输入完毕后会多出一个.git的文件夹,这个就是我们的git仓库
这个文件夹是隐藏的,点击左上角的查看,勾选上隐藏的项目就可以看到这个文件夹了
3.5 查看git仓库状态
可以通过git status查看git仓库的状态,我当前的状态仓库是空的,什么都没有添加进去,他会告诉你在当前目录下,什么东西没有被添加进去(未被追踪),红色字代表未被追踪的东西
一般我们使用git status -s 来查看仓库各文件的状态,红色的两个问号就代表这个文件未被追踪
3.6 将文件添加到缓存区
可以使用git add + 文件名来跟踪一个指定的文件,比如当前我想跟踪.idea这个文件夹
- 输入文件名+尾缀可以添加单独文件
跟踪后可以再次查看状态,发现.idea下面的所有文件都被追踪上了,绿色的A表示文件处于暂存状态
3.7 提交暂存区内的所有文件
输入 git commit -m "提交了idea"
再次查看状态后发现暂存区的文件没有了,而且idea也不在红色的问号后
3.8 对已提交的文件进行修改
我们当前在.idea中加入一个123.txt
这个时候再检查状态就出现了添加的123.txt
由于是新的文件,所以会出现两个问号,我们可以将其暂存然后提交上去
现在我们修改一下123.txt的内容,修改后再次查询状态,发现123.txt的前面有一个红色的M,这个表示这个文件的内容发生了变化,而且还没有放入暂存区中
可以给123.txt再次加入暂存区,添加后会变成一个绿色的M
和以前方式一样提交就行了,提交后123.txt会消失
3.9 还原git仓库中所保存的版本
我当前的123.txt内容是这样的,这个也是git仓库中保存的版本
现在我给他改成这样
现在我想改回去,可以使用git checkout -- .idea/123.txt 命令
改回去就不能再改回来了,慎用
输入完之后这个123.txt就改回来了
3.10 将所有文件都加入暂存区
一个项目中的文件有很多,我们当前还要这些没添加,使用git add . 就可以将该路径的所有文件都加入到暂存区
- 红色的M,红色的问号,使用git add .都会变为绿色的
- 文件数量多的时候会等待一会儿
查看状态会发现所有的文件前面都有绿色的A(已被放入缓存区)
3.11 取消已暂存的文件
现在我们想取消1.py的暂存,斜杠注意要是左斜杠,取消之后再检查这个1.py就不在缓存区了
- 不需要输入转义后的中文字符,直接输入中文就可以了
可以使用 git reset HEAD . 移除所有已缓存的文件,这样缓存的操作就都被取消了
3.12 跳过暂存区直接提交到git仓库
未追踪的文件没法跳过,只能跳过已暂存的,我们修改一下123.txt,修改后123.txt就变成了未暂存状态
我们使用git commit -a -m "" 进行直接提交
再次查看状态发现已经没有123.txt这个文件了
.13 从git仓库移除指定文件
我们现在想从git仓库中移除123.txt
查看状态发现123.txt前面有绿色的D,也有两个红色的问号
在提交后,git仓库中的123.txt消失
此时工作区(文件夹)中的123.txt依然存在
3.14 从git仓库与工作区中移除指定文件
相当于把这个文件彻底删掉,这个文件必须在git仓库中,如果没在git仓库中会提示这个
将123.txt搞到缓存中,然后删除,查询状态发现是绿色的D,但并没有两个红色的问号
因为此时的123.txt已经被彻底删除了,而且你无法在回收站中找到它
再次提交后在git仓库中也删除掉
3.15 git忽略文件
有一些文件我们不想让其出现在未跟踪的文件列表中,我们可以创建一个.gitignore文件来忽略文件
.gitignore文件的常用语法如下
- 以#开头的是注释
- 以/结尾的是目录
- 以/开头的是防止递归,不递归就是只忽略当前路径文件,但并不忽略其他路径下同样名称的文件
- 以!开头的是取反,比如你已经忽略的所有的txt文件,但有一个123.txt文件是你想要的,那么你写!123.txt就可以取消忽略
- 可以使用glob模式(一种正则表达式)进行文件和文件夹的比配,下面说一下glob的常用正则表达式符号
- 星号*匹配一个或多个任意字符,比如你想忽略所有js文件,你就可以写 *.js
- 中括号匹配在中括号内的任意一个字符,比如[abc]就是匹配a,b,c中的任意一个字符
- 问号?只匹配一个任意字符
- 方括号的横杠表示范围,比如[0-9]就是匹配0,1,2,3,4,5,6,7,8,9中的任意一个字符
- 两个星号表示匹配任意中间目录,比如我现在想找这个目录中的文件 D:/Ajax_demo/8.跨域请求/2.JSONP/2.jQuery中的JSONP/1.默认情况.html 那么就可以写成 D:/**/1.默认情况.html 当然这样就要求你在D盘下不能有重复名称的文件
视频中做了几个例子非常直观,可以看一下
现在我们创建一个.gitignore,用新建文本文档的方式创建,然后把名称和后缀都改了
之后可以用记事本打开,现在我们想忽略jquery-3.6.1.min.js与2.jQuery中Ajax的get与post请求目录下的所有文件
那么我们可以这样写
当涉及到中文的时候,你需要将.gitignore另存为一下,注意编码一定为UTF-8,这样中文就能生效了
保存后再次查看状态发现 jquery-3.6.1.min.js与2.jQuery中Ajax的get与post请求目录下的所有文件 不在未追踪范围内了
3.16 查看提交历史
输入git log可以查看所有的提交历史,越近的提交越靠上
当不想看了的时候按q退出
可以通过git log -数字 查看最近的几次提交,比如我想看最近的5次提交,使用这个命令不需要按q退出
可以加入--pretty=oneline让日志都在一行进行显示
oneline也可以配合 -数字 使用
也可以对日志进行查询 git log --pretty=format:"%h | %an | %ar | %s"
- %h 是提交的简写哈希值
- %an 是作者
- %ar 是距离现在多长时间
- %s 是提交说明
同样可以加入 -数字 进行筛选
3.17 将项目回退到指定版本
首先先查看所有的版本
我现在想让其恢复到 e6aacef 直接提交这个版本,输入 git reset --hard e6aacef
- e6aacef 是该版本的哈希值,在版本不多的时候可以给简写,如果有两个的简写都是 e6aacef 那么通过pretty=oneline查看哈希的全貌
由于我们回退了版本,所以我们之前删除的123.txt这个文件回来了
可以通过 git reflog --pretty=format:"%h | %an | %ar | %s" 简要查看所有版本情况,这里面是有回退后的版本的,当前用的版本在最上面
现在我先换回 beca0ff 这个版本,我们再使用同样的方法切换回来
4 gitee
gitee是共享代码的平台,gitee是国内的,github是国外的,使用方法上类似,不仅是界面类似,上传,创建项目这些也类似,下面说几个常用的功能
4.1 常用功能
可以在Pull Requests中为项目做一些贡献,比如修bug之类的
可以在Issues提出一些自己的问题,作者及其他开发者可能会看到然后帮你搞定
可以使用Fork在别人代码的基础上做修改,并将其变为自己的项目
4.2 创建空白仓库
在右上角点击新建仓库
输入名称后会自动补全路径,之后点击创建
创建之后会跳转到这个页面
4.3 上传文件至仓库
我们可以通过HTTPS与SSH两种方式访问仓库,使用HTTPS是零配置,但是每一次都需要输入用户名与密码,使用SSH需要稍稍配置一下,之后每一次都不用输入用户名与密码,实际开发中建议使用SSH方式
https开头的是HTTPS方式
git@开头的是SSH方式
上传之前要设置用户名与邮箱,这个按照提示走就可以了
4.3.1 HTTPS上传文件至仓库
创建一个本地的git仓库
把文件加入缓存区
提交到本地
关联云端仓库
推送到云端仓库
再次点击代码就有了提交的东西了
如果你有所更改就再执行一遍上面的流程就可以了,最后只输入git push就可以了,比如我现在把工作区搞成这样,上面上传的所有内容都放在了代码中,然后又增加了一个名为分析的文件夹
先暂存
提交到本地
由于是非首次提交所以可以直接git push
发现工作区的东西已经上传上去了
4.3.2 SSH上传文件至仓库
我们再新建一个仓库
SSH方法需要SSH key ,SSH key由两部分组成分别是id_rsa(私钥文件,存放在客户端的电脑上),id_rsa.pub(公钥文件,需要配置在gitee上)
首先生成私钥在git bash中输入 ssh-keygen -t rsa -b 4096 -C "账号注册的邮箱地址"
- 如果没有用邮箱进行注册可以在gitee中绑定账号
- 如果实在不想用邮箱地址给个任意字符串也行
输入后会让你看这个私钥放在哪里,选择默认的地方就好了
之后让你确认密码,使用默认的就完了
再之后确认密码,依然是按一下回车
按三次回车后就创建完毕了
创建完毕后你就可以在指定的路径下看到这两个文件了
4.3.2.2 生成公钥
用记事本打开id_rsa.pub,复制其中的所有内容
之后点击个人中心的SSH公钥
粘贴进去后点击确定
输入你当前账号的密码
可以从本地检验一下公钥是否配置成功,输入 ssh -T git@gitee.com ,当提示是否连接的时候输入yes,出现下面这张图就表示配置成功了
- 如果是github就是 ssh -T git@github.com
4.3.2.3 上传
如果之前对邮箱做了修改这里需要重新配置邮箱的信息
剩下的操作就类似了
建立远程连接,远程连接的地址是与http方式不同的,在建立一个新的项目时会有提示
这个路径不用去记,在上传后点击 克隆下载 会出现一样的地址
上传
后面想再上传在本地提交后直接用git push就可以了
再次去看gitee上的仓库发现上传成功
4.4 将远程仓库克隆到本地
在仓库中点击下载可以下载一个压缩包,解压后就是仓库的内容
也可以使用git clone 仓库地址 将仓库下载下来,仓库地址就是 git@gitee.com:Suyuo/html5-notes.git 这个是SSH方式的地址,你也可以选择别的方式的地址
首先在想下载的地方打开git bash
然后输入 git clone git@gitee.com:Suyuo/html5-notes.git
- 如果仓库过大需要等待一会儿
下载完毕后就可以在指定的路径找到下载好的仓库了
5 分支
分支可以让多人开发而不相互干扰,比如说做登录功能的你就去做登录,做注册功能的你就去做注册,开发过程中互不干扰,到最后将分支合并会得到完整的项目
master是主分支,我们上面上传的文件都是上传到master中的
master用来保存与记录整个项目已经完成的功能代码,所以我们不允许每一个人都可以在master上修改代码。为了不影响最后的结果所以要每一个人都在各自的分支中进行开发
5.1 查看所有分支
可以使用 git branch查看git仓库中的分支列表,master前面有一个星号,这代表你当前所处的分支是master,命令行上的(master)也是提示你此时正在master分支
5.2 创建新分支
使用 git branch 分支名称 可以创建新的分支
我先在项目中创建一个123.txt但是不写内容
我们现在想创建一个名为login的分支
使用git branch 分支名称 创建分支完毕后,此时你依然在创建前的分支中
新分支的代码与当前分支的代码完全相同,比如我现在创建的login与master的代码就是相同的
5.3 切换分支
切换分支会导致工作区的文件内容发生改变
在master中搞一个123.txt,然后随便写一点内容
然后提交上去
之后使用 git checkout 分支名 切换到别的分支上
这个时候再打开123.txt里面就是空的,因为创建分支的时候就是空的,修改master中的123.txt不会对login中的123.txt造成影响
.4 创建并切换新分支
使用 git checkout -b 分支名 可创建并切换分支
新分支的代码依然与创建前分支的代码完全相同,比如我现在的payment就和login是一样的,而payment和master是没有关系的
所以payment中的123.txt也是空的
在创建分支的时候,我们建议都先切回到master,然后从master创建新分支
5.5 合并分支
在A中合并B会让A中包含B的内容,但并不会更改b的内容,我们先在login中创建一个456.txt,之后向456.txt中随便写点儿东西,让其大小不为0
然后提交
我们下面在master中合并login,们先切回master分支
切回master分支后发现456.txt这个文件消失了
之后将master与login合并到一起
- 我这里会跳出来个窗口问你为什么合并,直接:q就能退出
合并后被合并的分支依然存在
当前master就既有以前master的内容,也有login的内容
而login中的内容没有变化
5.6 删除分支
我们现在删除payment分支,输入 git branch -d payment
- 删除某一个分支不能自己在某一个分支上,比如要删除payment就要从payment上切出来,不切出来就会报错
- 在分支没有合并到主分支之前就删除分支会报错,同时也会给出提示,如果想要强制删除可以使用 git branch -D 分支名称
5.7 合并时发生冲突
刚刚合并master与login的时候,master中只有123.txt,login中只有456.txt(123.txt中没有内容不算),所以不会发生冲突,现在我们在login中的123.txt书写上不同的内容,之后提交,提交后切回master,再次进行合并,此时就会爆发冲突
这个时候你再搞别的操作是不好使的
打开123.txt,发现git把master和login的内容都放在了冲突的文件123.txt中
这个时候你要手动修改冲突的文件
保存后输入 git add . 以及 git commit -m "" 进行暂存与提交
之后你就可以进行其他的操作了
5.8 将分支推送到远程仓库
首先建立本地仓库与远程仓库的联系,如果之前已经建立完了联系可以不建立,我这里就提示origin这个联系已经存在了
我现在想把login分支推送到远程仓库,并在远程仓库中起名叫login_test
上面那个样子就表明已经推送成功了,这个时候去你的远程仓库看一下,发现会多了一个分支
login_test就是你刚刚推送上去的内容
之前推送的master还是原来的内容,此次的推送对master没有任何影响
第一次需要加 -u 以及后面的参数,后面就直接git push就可以了
5.9 查看远程仓库所有分支列表
确认建立本地与远程的联系后,输入 git remote show 远程仓库名称 查看远程仓库所有分支
5.10 将远程分支下载到本地分支
我们先删除本地的 login这个分支
之后再从远程分支上下载下来,输入git checkout login_test 就可以把远程分支的内容下载到本地
这样搞本地分支与远程分支的名称是相同的,也可以搞成不同的
5.11 从远程仓库拉取最新的代码
我们现在在远程仓库上传一个新的文件789.txt,里面随便写一些内容
然后我们输入 git pull ,想要获取哪个分支的最新情况就在哪个分支执行get pull
这样你就拿到了最新更新的内容了
5.12 删除远程分支
可以用可视化的页面来搞
也可以用git搞,现在我想删除 login_test 这个分支,本地你处于哪个分支都行,输入 git push origin --delete login_test
这样远程仓库的login_test分支就没了