一、概述
git是一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码。作用是记录代码内容,切换代码版本,多人开发时高效合并代码内容。
直接安装git,默认下一步,然后就能在VScode中看到git控制台
配置用户信息
配置:用户名和邮箱,应用在每次提交代码版本时表明自己的身份。
命令:
git config --global user.name "在这里设置名字"
git config --global user.email "在这里设置邮箱"
设置完毕后使用命令 git config --list 查看配置是否生效
二、Git仓库
Git仓库:记录文件状态内容的地方,存储着修改的历史记录
创建
1、把本地文件夹转换成Git仓库:命令git init
2、从其他服务器上克隆git仓库
本地仓库
打开一个程序,执行命令git init,这会生成一个.git文件夹,这是用来保存文件的
创建好的.git文件夹是隐藏目录,不打开隐藏可见的话是看不到的
git的三个区域
工作区:实际开发时操作的文件夹
暂存区:保存之前的准备区域(暂存改动过的文件)
版本库:提交并保存暂存区的内容,产生一个版本快照
命令 | 作用 |
git add 文件名 | 暂存指定文件 |
git add . | 暂存所有改动的文件(推荐) |
git commit -m "注释说明" | 提交并保存,产生版本快照 |
示例
现在我们有一个程序,我们尝试将它上传至git管理
git ls-files 这个指令可以查看是否成功存入暂存区,之后再提交
这样即代表提交成功
注意:
出现这种警告是因为文件中有多余的空白字符。由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了,一些细微的空格变化会不经意地混入提交,造成麻烦。虽然这是小问题,但它会极大地扰乱跨平台协作。
具体可以查看这篇博客https://blog.csdn.net/u012757419/article/details/105614028
Git文件状态
git文件有两种状态
未跟踪:新文件、从未被Git管理过(U)
已跟踪:Git已经知到和管理的文件(A)
版本查看指令:git status -s
这与git的基本使用相关,先总结一下上面的内容,我们书写一个程序,此时它的状态为未修改(’‘)。我们使用git add指令后,git会将它放入暂存区中,程序变为已修改状态(M),直到我们使用git commit命令,git才会将我们所写的程序以版本的形式存入版本库,未来我们可以通过这个回退版本。注意提交并不会清空暂存区,且会让项目文件重置为未修改状态
因此git的基本使用就是: 修改文件,暂存,提交保存记录,如此反复
举例
更改文件,文件的后面就会有 M 标记,这代表此时它被修改了
或者此时可以输入指令 git status -s ,确实处于 M 已修改状态
提交会清空状态
三、区域使用
暂存区使用
暂存区作用:可以恢复代码内容,与版本库解耦。
git restore [ 目标文件 ]:使用这个命令 ,即可让暂存区的目标文件覆盖工作区的目标文件(确认真的要覆盖的时候再使用)
git rm --cached [ 目标文件 ]:从暂存区中移除文件
版本库使用
版本回退:将版本库的某个版本对应的内容快照,恢复到工作区/暂存区
查看提交历史:git log --oneline
、
回退指令:
git reset --soft [ 版本号 ]:新添加的文件,也就是未被跟踪的文件会被保留
git reset --hard [ 版本号 ]:新添加的文件,也就是未被跟踪的文件会被删除,完完全全的恢复到保存的版本
git reset --mixed [ 版本号 ]:工作区中未被跟踪的文件会被保留,而暂存区中的会被删除,这个与直接输入git reset的效果一样
文件忽略
.gitignore文件可以让git彻底忽略跟踪指定文件。
目的:让git仓库更小更快,避免重复的无意义文件管理
例如:
- 系统或软件自动生成的文件
- 编译时产生的结果文件
- 运行时生成的日志文件、缓存文件、临时文件等
- 涉密文件,密码,密钥等
前端文件中,一般都忽略这些文件。
四、分支
概念:本质上是指向提交节点的可变指针,默认名字是master。
简单来说,就是一个容器,可以保存某个提交的节点记录。
使用场景:
开发新需求/修复bug,保证主线代码随时使用,多人协同开发提高效率。
比如:在现有的代码上创建新的分支完成内容列表业务,突然需要紧急修复bug -> 单独创建分支解决bug
步骤
- 创建分支:git branch [ 分支名 ]
- 切换分支:git checkout [ 分支名 ]
- 工作区准备代码并暂存提交
这里面我创建了一个分支content,当我们切换回master时,我们所写的content的代码都不见了,但是我们切换回来的时候就出现了。
合并与删除
将写好的分支合并回到master分支上,并删除分支
指令:git merge [ 分支 ]
步骤
- 切回到要合入的分支上:git check master
- 合并其他分支:gir merge [分支]
- 删除合并后的分支指针:git branch -d [分支]
查看版本列表,成功合并
删除分支
合并与提交
如果有多条分支,且在合并的时候发现已经被别的分支合并过了,那么就会自动生车成一个新的分支,这个分支下会拥有所有的代码
使用指令git merge content
注意:这个指令这会比较不同分支的提交时间,因此以时间为顺序合并到分支上
使用指令检验一下分支
发现content指向8而不是10
合并冲突
这个错误只能手动解决,让两个不同的文件相同,否则无法合并
因此为了避免
五、常用指令
总结一下 上面涉及的指令
命令 | 作用 | 注意 |
git -v | 查看git版本 | |
git init | 初始化git仓库 | |
git add [ 文件标识 ] | 暂存某个文件 | 这个文件路径要以终端为起始的相对路径 |
git add . | 暂存所有文件 | |
git commit -m " 说明注释 " | 提交版本记录 | 提交的是暂存区的内容 |
git status | 查看文件状态 -详细信息 | |
git status -s | 查看文件状态 -简略信息 | 第一列是暂存区状态,第二列是工作区状态 |
git ls -files | 查看暂存区文件列表 | |
git restore 文件标识 | 从暂存区恢复到工作区 | 若文件标识为 . 那么就是恢复全部文件 |
git rm --cached 文件标识 | 从暂存区移除文件 | |
git log | 查看提交记录 -详细信息 | |
git log --oneline | 查看提交记录 -简略信息 | 版本号 分支指针 提交时说明注释 |
git reflog --oneline | 查看完整历史 | 包括提交,切换,回退等记录 |
git reset 版本号 | 切换版本代码到暂存区和工作区 | --hard 不保留任何文件 |
git branch 分支名 | 创建分支 | |
git merge 分支名 | 合并分支 | |
git branch -d 分支名 | 删除分支 | |
git branch | 查看本地分支 | |
git checkout 分支名 | 切换分支 | |
git checkout -b 分支名 | 创建并立刻切换分支 |
六、Git远程仓库
概念:托管在因特网或其他网络中的项目的版本库
作用:保存版本库的历史记录,多人协作
创建:公司自己的服务器 / 第三方托管平台(Gitee,GitLab,GitHub...)
使用步骤
我们在这里使用第三方托管平台Gitee
1、注册账号
2、新建仓库得到远程仓库Git地址
3、本地Git仓库添加远程仓库原点地址
命令:git remote add 远程仓库名 本地和远程分支名
4、本地Git仓库推送版本记录到远程仓库
命令:git push -u 远程仓库名 本地和远程分支名
例如:git push -u origin master
在gitee中创建一个仓库,其中有两种地址
连接一下地址,会发现有两个地址
如果想要取消连接,那么就使用指令
git remote remove origin 移除仓库
提交版本至远程仓库,使用指令git remote push -u origin master,如果是第一次使用gitee,那么就会出现登录界面,登录就行了
如果你的项目中有README.md文件,那么在gitee网页上就会展示出来作为这个项目的介绍和使用说明
克隆
拷贝一个Git仓库到本地,进行使用
要克隆首先要准备一个空文件夹
然后使用Git的窗口
同步
多人协同开发:想要看到别人同步上去的最新内容:git pull origin master
通过这个,当别人的项目更新了就不需要重新克隆一个了,直接pull过来就行了
七、图形化界面上使用Git
VScode上使用git
vscode左边会有这么一个工具,叫做源代码管理
其中会显示有更改的文件
只要点击就会对比两个文件的修改位置,左边是更改前,右边是更改后 。点击加号 + 就会保存修改将其保存在暂存区
点击提交就会提交到本地仓库中
点击同步更改就会将本地仓库中的记录推送到远程仓库中
可以看到是拉去并推送提交
就是说底层是先pull了一下再push的,这是因为再多人协作的时候,如果两个人同时修改了同一个文件,但是彼此又不知道。那么先push的人就可以修改成功,后push的人就会发生合并冲突,如果强制push,远端仓库会自动合并,保留出现冲突的内容(上一个版本和刚提交的内容都会被保留下来)。这时代码将不能正常运行,其他同事在执行 pull 拉取新代码后会发现无法运行,这就给别人造成了很大的麻烦。所以即使是自己使用命令行操作git,也要养成push前先pull一下的习惯。