此笔记为本人[
Git/Gitee/Github
]笔记,以及后续Git使用过程遇到的问题与解决也会记录补充于此观阅或查阅的学习资料:【尚硅谷】Git入门到精通全套教程
1. Git概述
Git是一个免费的、开源的分布式版本控制系统,可以快速高效的处理从小型到大型的各种项目
1.1、Git特性
- 廉价的本地库
- 多个流分支
- 方便的暂存区域
- 分布式
1.2、何为版本控制
版本控制是一种记录文件内容变化,以便将来查询特定版本修订情况的系统
版本控制最重要的是可以记录文件修改历史记录,从而让用户可以看到历史版本
我感觉最重要的是可以进行==版本切换==
git可以从个人开发过渡到团队协作
1.3、版本控制工具
- 集中式版本控制工具
- SVM
- CVS
这种方式有个缺点,就是中央服务器单点故障时,在这期间,谁都没有办法提交更新,也就无法协同工作
- 分布式版本控制工具
- Git
分布式的版本控制系统解决了集中式版本控制系统的缺陷,使得在中央服务器断网的情况下可以进行开发,每个客户端保存的也都是整个完整的项目
1.4、Git发展历史
1.5、Git工作机制和代码托管中心
工作机制:
工作区就是你在本地IDE写代码的区域
本地库就是文件夹里面的那个git文件夹
代码托管中心就是基于网络服务器的远程代码仓库,一般我们简称为远程库,也就是我们在执行git push
指令之后把本地库上传到的地址
- 局域网
- GitLab
- 互联网
- GitHub(外网,需翻墙)
- Gitee码云(国内最大的代码托管平台)
2.Git常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加文件到暂存区 |
git commit -m “备注信息” 文件名 | 提交文件到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
注意:这里的用户签名和将来登录任何的代码托管平台中心没有任何的关系,设置的邮箱也可以是虚拟邮箱,只是用来区分用户而已
2.1、初始化本地库
git init
初始化后当前目录生成一个空.git目录,注意:git目录里的文件不要修改
2.2、查看本地库的状态
git status
在当前目录下添加个文件后,再执行git status命令
2.3、添加到暂存区
git add 文件名
2.4、把文件从暂存区删除
git rm --cached 文件名
注意:只是把文件从暂存区里面删掉,工作区的仍存在
2.5、将暂存区的文件提交到本地库
git commit -m "日志信息" 文件名
2.6、查看版本信息
git reflog
注意:使用 git reflog命令查询的版本号是完整版版本号的前七位
2.7、查看详细的版本信息
git log
2.8、修改文件
因为git是按照行来维护的,所以它只能只能把修改前的那一行删除,把修改后的那一行新增
2.9、版本穿梭
- 先用
git reflog
查看历史版本信息
- 然后复制你想要穿梭的版本号
-
使用命令
git reset
穿梭git reset --hard 版本号
.git文件夹的文件信息
3.Git分支
3.1、分支的简单理解
在版本控制过程中,每个任务我们可以创建每个任务的单独分支。分支意味着可以把自己的工作从主线上分离开来,开发自己分支的时候,不会影响到主线分支的运行。分支可以理解为副本,一个分支就是一个单独的副本。
同时并行推进多个功能的开发,提高开发的效率,如果分支在开发过程中失败,不会对其它分支有任何的影响,只需要把失败的分支删除,然后重新开始就可以了
3.2、分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 合并分支 |
3.2.1、查看分支
git branch -v
查得当前只有一个master分支
3.2.2、创建分支
git branch 分支名
可知分支hot-fix已经创建成功
3.2.3、切换分支
git checkout 分支名
在hot-fix分支上修改文件后,提交到本地库
注意看:此时切换为主分支,但是在hot-fix分支上面修改的文件在主分支中没有修改
hot-fix分支hello.txt文件:
主分支hello.txt文件:
3.2.4、合并分支
git merge 分支名
此时查看master分支的hello.txt文件,发现hot-fix分支的文件已经合并成功
注意:上述合并为正常合并,没有冲突的情况
下面演示分支合并有冲突的情况
master分支中的hello.txt内容:
hot-fix分支中的hello.txt内容:
提示修复冲突后再提交
解决方案:需要人为的打开冲突的文件
将该部分进行人为修改然后保存
注意:执行git commit
的时候不能再带文件名
合并成功
Git切换分支的底层原理其实就是HEAD指针的指向切换,当前所在的分支,其实就是由HEAD决定的,所以创建分支的本质就是多创建一个指针
- HEAD如果指向master,那么我们现在就是在master分支上
- HEAD如果指向hot-fix,那么我们现在就是在hot-fix分支上
HEAD的查看在上文有讲述,其实就是在.git文件夹里面的HEAD文件里面
4、Git团队内协作
- 团队内协作
就以尚硅谷的这张图来讲解一下
- 岳小姐是华山派的掌门人,开发了华山剑法,她首先用Git初始了一下自己的本地库,然后在自己本地库开发华山剑法,但此时因为只是存在本地,她的弟子想要学习和完善就没有办法,此时她就把自己的本地库
git push
到代码托管中心,此时她的本地库就被推送到远程库那边 - 然后这时,帅气的令狐小哥就可以把岳小姐开发的剑法从远程库上面
git clone
到自己的本地库,然后就可以在自己的本地库上面对岳小姐的剑法进行学习,学习完后他感觉岳小姐的剑法有些问题,就自己在他的本地库进行研发改进,然后把自己修改过后的本地库git push
到远程库上面给岳小姐看(令狐小哥能push的前提是岳小姐给了令狐小哥权限,就是把令狐小哥加到自己的团队里面) - 在令狐小哥把自己的代码push到远程库之后,岳小姐就可以从远程库中
git pull
下来,看看令狐小哥修改的剑法,此时岳小姐的本地库就更新成远程库的内容
总结一下:
团队的负责人:
1.现在自己的本地初始化仓库 git init
2.在代码托管平台中心建立一个远程库 (Gitee/GitHub)这里就不详细讲解
3.在远程库中给团队的成员权限
4.把自己初始化的本地库推送到远程库
主要的代码就是这三句
git add . 添加到暂存区
git commit -m "备注" 提交到本地库
git push 远程库地址 推送到远程库
5.然后在自己本地开发然后重复步骤3
团队的其他人:
1.先把负责人给的仓库clone下来 git clone 远程库地址
2.在自己本地开发
3.把自己的本地库推送到远程库
主要的代码就是这三句
git add . 添加到暂存区
git commit -m "备注" 提交到本地库
git push 远程库地址 推送到远程库
- 跨团队协作
- 岳小姐和令狐小哥觉得自己开发的剑法太次了,然后令狐小哥找到自己的老情人东方美女,想要东方美女帮忙改一下剑法,但是东方美女是东方集团的CEO,是不可能加入到岳小姐的团队中,所以东方美女就在代码托管中心,把岳小姐的远程库fork到自己的远程库中
- 然后东方美女把自己的远程库
git clone
下来到自己的本地库中,然后在自己本地中修改岳小姐的剑法,欲练此功挥刀自宫…,在把岳小姐的剑法改成辟邪剑法后,git push
到她自己的远程库上面,然后东方美女在自己的远程库发一个Pull request请求,然后岳小姐接受到了东方美女的请求后,对请求进行审核,审核之后,岳小姐把自己的远程库和东方美女的进行合并 - 接着岳小姐就把远程库
git pull
到自己的本地库中,同时岳小姐的团队的人也可以拉去下来辟邪剑谱,比如令狐小哥就把辟邪剑谱拉下来进行修炼了
5、GitHub
5.1、远程仓库操作
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 创建远程库地址别名 |
git push 别名 分支 | 推送本地分支的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与本地分支直接合并 |
5.2、创建远程库地址别名
git remote -v 查看当前所有远程地址别名
git remote add [别名] [远程地址]
5.3、推送本地库到远程库
git push 别名 分支名
GitHub刷新一下就可以看到
5.4、拉取远程库到本地库
git pull 别名 分支名
查看文件内容
5.5、克隆远程库到本地
git clone 远程库地址
clone会做如下操作:
- 拉取代码
- 初始化本地库
- 创建别名
5.6、GitHub团队内协作
管理员设置用户权限
然后把链接分享给用户,用户登录他的github,粘贴该链接,点击同意即可成为成员
5.7、GitHub跨团队协作
- 把别人的项目fork一份到自己的远程库中
- 在自己远程库中可以看到fork的仓库
- clone到本地库中,然后进行修改
git clone 仓库地址
注意:本地修改后的代码在别人的项目中是看不到的,只有在你自己fork的那个仓库看得到
- 把你修改的代码pull requests给原作者审核
- 原作者审核后,如果感觉写的可以,再把你写的代码合并