目录
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 删除远程分支
如果将项目的所有文件都存在本地,有这么几个缺点
为解决种种的不方便可以使用版本控制软件,版本控制软件基本分为 本地版本控制系统,集中化版本控制系统与分布式版本控制系统,总的来讲分布式优于集中化,集中化优于本地
关于版本控制的更多理论可以看一下视频 01.版本控制的概念_哔哩哔哩_bilibili
git是版本控制软件之一,属于分布式版本控制系统。
区域分为工作区,暂存区与Git仓库。
状态分为 已被git管理与未被git管理。
已被git管理中包含三种状态,分别是已修改,已缓存,已提交
关于git详细介绍看一下这个 黑马程序员AJAX零基础到精通_整合Git核心内容全套教程_哔哩哔哩_bilibili P77-P78
有很多开源许可协议,我们主要了解其中两种常见的协议需要注意的点
GPL
Linux遵循GPL协议,按照道理来讲,你使用了GPL的开源内容,你的项目就不许卖钱了
MIT
像jQuery,Node.js都遵循MIT协议,当你使用了MIT的开源内容,你的项目卖出去后需要包含人家原作者的信息
之后下载一个git,地址 Git
我的是64位,我就选64位了
next
选择安装路径后点击next
next
next
右键任意文件夹空白处可以看到Git GUI Here与Git Bash Here就代表git安装成功了
用户名和邮件地址都是字符串,自己随便写就行,如果使用了--global那么在该机器上可以一直生效,我们搞一下,随便找个地方点击右键,然后点击Git Bash Here
点击后会显示一个终端
之后设置用户名为 Suyu
之后设置邮箱
git的配置会存在 C:\Users\MSI(计算机用户名)文件夹下的.gitconfig下
我当前的内容是这样的,下面credential gitee是我以前用过的痕迹
可以通过命令查看所有全局配置项
初始化仓库就是自己的本地目录转换成git仓库,我们现在在这个目录下初始化一个git仓库
在当前目录下的空白处右键,然后点击git Bash打开git终端,之后输入git init
输入完毕后会多出一个.git的文件夹,这个就是我们的git仓库
这个文件夹是隐藏的,点击左上角的查看,勾选上隐藏的项目就可以看到这个文件夹了
可以通过git status查看git仓库的状态,我当前的状态仓库是空的,什么都没有添加进去,他会告诉你在当前目录下,什么东西没有被添加进去(未被追踪),红色字代表未被追踪的东西
一般我们使用git status -s 来查看仓库各文件的状态,红色的两个问号就代表这个文件未被追踪
可以使用git add + 文件名来跟踪一个指定的文件,比如当前我想跟踪.idea这个文件夹
跟踪后可以再次查看状态,发现.idea下面的所有文件都被追踪上了,绿色的A表示文件处于暂存状态
输入 git commit -m "提交了idea"
再次查看状态后发现暂存区的文件没有了,而且idea也不在红色的问号后
我们当前在.idea中加入一个123.txt
这个时候再检查状态就出现了添加的123.txt
由于是新的文件,所以会出现两个问号,我们可以将其暂存然后提交上去
现在我们修改一下123.txt的内容,修改后再次查询状态,发现123.txt的前面有一个红色的M,这个表示这个文件的内容发生了变化,而且还没有放入暂存区中
可以给123.txt再次加入暂存区,添加后会变成一个绿色的M
和以前方式一样提交就行了,提交后123.txt会消失
我当前的123.txt内容是这样的,这个也是git仓库中保存的版本
现在我给他改成这样
现在我想改回去,可以使用git checkout -- .idea/123.txt 命令
改回去就不能再改回来了,慎用
输入完之后这个123.txt就改回来了
一个项目中的文件有很多,我们当前还要这些没添加,使用git add . 就可以将该路径的所有文件都加入到暂存区
查看状态会发现所有的文件前面都有绿色的A(已被放入缓存区)
现在我们想取消1.py的暂存,斜杠注意要是左斜杠,取消之后再检查这个1.py就不在缓存区了
可以使用 git reset HEAD . 移除所有已缓存的文件,这样缓存的操作就都被取消了
未追踪的文件没法跳过,只能跳过已暂存的,我们修改一下123.txt,修改后123.txt就变成了未暂存状态
我们使用git commit -a -m "" 进行直接提交
再次查看状态发现已经没有123.txt这个文件了
我们现在想从git仓库中移除123.txt
查看状态发现123.txt前面有绿色的D,也有两个红色的问号
在提交后,git仓库中的123.txt消失
此时工作区(文件夹)中的123.txt依然存在
相当于把这个文件彻底删掉,这个文件必须在git仓库中,如果没在git仓库中会提示这个
将123.txt搞到缓存中,然后删除,查询状态发现是绿色的D,但并没有两个红色的问号
因为此时的123.txt已经被彻底删除了,而且你无法在回收站中找到它
再次提交后在git仓库中也删除掉
有一些文件我们不想让其出现在未跟踪的文件列表中,我们可以创建一个.gitignore文件来忽略文件
.gitignore文件的常用语法如下
视频中做了几个例子非常直观,可以看一下
现在我们创建一个.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请求目录下的所有文件 不在未追踪范围内了
输入git log可以查看所有的提交历史,越近的提交越靠上
当不想看了的时候按q退出
可以通过git log -数字 查看最近的几次提交,比如我想看最近的5次提交,使用这个命令不需要按q退出
可以加入--pretty=oneline让日志都在一行进行显示
oneline也可以配合 -数字 使用
也可以对日志进行查询 git log --pretty=format:"%h | %an | %ar | %s"
同样可以加入 -数字 进行筛选
首先先查看所有的版本
我现在想让其恢复到 e6aacef 直接提交这个版本,输入 git reset --hard e6aacef
由于我们回退了版本,所以我们之前删除的123.txt这个文件回来了
可以通过 git reflog --pretty=format:"%h | %an | %ar | %s" 简要查看所有版本情况,这里面是有回退后的版本的,当前用的版本在最上面
现在我先换回 beca0ff 这个版本,我们再使用同样的方法切换回来
gitee是共享代码的平台,gitee是国内的,github是国外的,使用方法上类似,不仅是界面类似,上传,创建项目这些也类似,下面说几个常用的功能
可以在Pull Requests中为项目做一些贡献,比如修bug之类的
可以在Issues提出一些自己的问题,作者及其他开发者可能会看到然后帮你搞定
可以使用Fork在别人代码的基础上做修改,并将其变为自己的项目
在右上角点击新建仓库
输入名称后会自动补全路径,之后点击创建
创建之后会跳转到这个页面
我们可以通过HTTPS与SSH两种方式访问仓库,使用HTTPS是零配置,但是每一次都需要输入用户名与密码,使用SSH需要稍稍配置一下,之后每一次都不用输入用户名与密码,实际开发中建议使用SSH方式
https开头的是HTTPS方式
git@开头的是SSH方式
上传之前要设置用户名与邮箱,这个按照提示走就可以了
创建一个本地的git仓库
把文件加入缓存区
提交到本地
关联云端仓库
推送到云端仓库
再次点击代码就有了提交的东西了
如果你有所更改就再执行一遍上面的流程就可以了,最后只输入git push就可以了,比如我现在把工作区搞成这样,上面上传的所有内容都放在了代码中,然后又增加了一个名为分析的文件夹
先暂存
提交到本地
由于是非首次提交所以可以直接git push
发现工作区的东西已经上传上去了
我们再新建一个仓库
SSH方法需要SSH key ,SSH key由两部分组成分别是id_rsa(私钥文件,存放在客户端的电脑上),id_rsa.pub(公钥文件,需要配置在gitee上)
4.3.2.1 生成私钥
首先生成私钥在git bash中输入 ssh-keygen -t rsa -b 4096 -C "账号注册的邮箱地址"
输入后会让你看这个私钥放在哪里,选择默认的地方就好了
之后让你确认密码,使用默认的就完了
再之后确认密码,依然是按一下回车
按三次回车后就创建完毕了
创建完毕后你就可以在指定的路径下看到这两个文件了
4.3.2.2 生成公钥
用记事本打开id_rsa.pub,复制其中的所有内容
之后点击个人中心的SSH公钥
粘贴进去后点击确定
输入你当前账号的密码
可以从本地检验一下公钥是否配置成功,输入 ssh -T [email protected] ,当提示是否连接的时候输入yes,出现下面这张图就表示配置成功了
4.3.2.3 上传
如果之前对邮箱做了修改这里需要重新配置邮箱的信息
剩下的操作就类似了
建立远程连接,远程连接的地址是与http方式不同的,在建立一个新的项目时会有提示
这个路径不用去记,在上传后点击 克隆下载 会出现一样的地址
上传
后面想再上传在本地提交后直接用git push就可以了
再次去看gitee上的仓库发现上传成功
在仓库中点击下载可以下载一个压缩包,解压后就是仓库的内容
也可以使用git clone 仓库地址 将仓库下载下来,仓库地址就是 [email protected]:Suyuo/html5-notes.git 这个是SSH方式的地址,你也可以选择别的方式的地址
首先在想下载的地方打开git bash
然后输入 git clone [email protected]:Suyuo/html5-notes.git
下载完毕后就可以在指定的路径找到下载好的仓库了
分支可以让多人开发而不相互干扰,比如说做登录功能的你就去做登录,做注册功能的你就去做注册,开发过程中互不干扰,到最后将分支合并会得到完整的项目
master是主分支,我们上面上传的文件都是上传到master中的
master用来保存与记录整个项目已经完成的功能代码,所以我们不允许每一个人都可以在master上修改代码。为了不影响最后的结果所以要每一个人都在各自的分支中进行开发
可以使用 git branch查看git仓库中的分支列表,master前面有一个星号,这代表你当前所处的分支是master,命令行上的(master)也是提示你此时正在master分支
使用 git branch 分支名称 可以创建新的分支
我先在项目中创建一个123.txt但是不写内容
我们现在想创建一个名为login的分支
使用git branch 分支名称 创建分支完毕后,此时你依然在创建前的分支中
新分支的代码与当前分支的代码完全相同,比如我现在创建的login与master的代码就是相同的
切换分支会导致工作区的文件内容发生改变
在master中搞一个123.txt,然后随便写一点内容
然后提交上去
之后使用 git checkout 分支名 切换到别的分支上
这个时候再打开123.txt里面就是空的,因为创建分支的时候就是空的,修改master中的123.txt不会对login中的123.txt造成影响
使用 git checkout -b 分支名 可创建并切换分支
新分支的代码依然与创建前分支的代码完全相同,比如我现在的payment就和login是一样的,而payment和master是没有关系的
所以payment中的123.txt也是空的
在创建分支的时候,我们建议都先切回到master,然后从master创建新分支
在A中合并B会让A中包含B的内容,但并不会更改b的内容,我们先在login中创建一个456.txt,之后向456.txt中随便写点儿东西,让其大小不为0
然后提交
我们下面在master中合并login,们先切回master分支
切回master分支后发现456.txt这个文件消失了
之后将master与login合并到一起
合并后被合并的分支依然存在
当前master就既有以前master的内容,也有login的内容
而login中的内容没有变化
我们现在删除payment分支,输入 git branch -d payment
刚刚合并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 "" 进行暂存与提交
之后你就可以进行其他的操作了
首先建立本地仓库与远程仓库的联系,如果之前已经建立完了联系可以不建立,我这里就提示origin这个联系已经存在了
我现在想把login分支推送到远程仓库,并在远程仓库中起名叫login_test
上面那个样子就表明已经推送成功了,这个时候去你的远程仓库看一下,发现会多了一个分支
login_test就是你刚刚推送上去的内容
之前推送的master还是原来的内容,此次的推送对master没有任何影响
第一次需要加 -u 以及后面的参数,后面就直接git push就可以了
确认建立本地与远程的联系后,输入 git remote show 远程仓库名称 查看远程仓库所有分支
我们先删除本地的 login这个分支
之后再从远程分支上下载下来,输入git checkout login_test 就可以把远程分支的内容下载到本地
这样搞本地分支与远程分支的名称是相同的,也可以搞成不同的
我们现在在远程仓库上传一个新的文件789.txt,里面随便写一些内容
然后我们输入 git pull ,想要获取哪个分支的最新情况就在哪个分支执行get pull
这样你就拿到了最新更新的内容了
可以用可视化的页面来搞
也可以用git搞,现在我想删除 login_test 这个分支,本地你处于哪个分支都行,输入 git push origin --delete login_test
这样远程仓库的login_test分支就没了