关于Git这一篇就足够了

此笔记为本人[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、版本穿梭

  1. 先用git reflog查看历史版本信息

在这里插入图片描述

  1. 然后复制你想要穿梭的版本号

在这里插入图片描述

  1. 使用命令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文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Npj7QYuQ-1672321278483)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20221229121911682.png)]

主分支hello.txt文件:

在这里插入图片描述

3.2.4、合并分支

git merge 分支名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQqbjnEZ-1672321278484)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20221229122234474.png)]

此时查看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团队内协作

  • 团队内协作

在这里插入图片描述

就以尚硅谷的这张图来讲解一下

  1. 岳小姐是华山派的掌门人,开发了华山剑法,她首先用Git初始了一下自己的本地库,然后在自己本地库开发华山剑法,但此时因为只是存在本地,她的弟子想要学习和完善就没有办法,此时她就把自己的本地库git push到代码托管中心,此时她的本地库就被推送到远程库那边
  2. 然后这时,帅气的令狐小哥就可以把岳小姐开发的剑法从远程库上面git clone到自己的本地库,然后就可以在自己的本地库上面对岳小姐的剑法进行学习,学习完后他感觉岳小姐的剑法有些问题,就自己在他的本地库进行研发改进,然后把自己修改过后的本地库git push到远程库上面给岳小姐看(令狐小哥能push的前提是岳小姐给了令狐小哥权限,就是把令狐小哥加到自己的团队里面)
  3. 在令狐小哥把自己的代码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 远程库地址         推送到远程库
  • 跨团队协作

在这里插入图片描述

  1. 岳小姐和令狐小哥觉得自己开发的剑法太次了,然后令狐小哥找到自己的老情人东方美女,想要东方美女帮忙改一下剑法,但是东方美女是东方集团的CEO,是不可能加入到岳小姐的团队中,所以东方美女就在代码托管中心,把岳小姐的远程库fork到自己的远程库中
  2. 然后东方美女把自己的远程库git clone下来到自己的本地库中,然后在自己本地中修改岳小姐的剑法,欲练此功挥刀自宫…,在把岳小姐的剑法改成辟邪剑法后,git push到她自己的远程库上面,然后东方美女在自己的远程库发一个Pull request请求,然后岳小姐接受到了东方美女的请求后,对请求进行审核,审核之后,岳小姐把自己的远程库和东方美女的进行合并
  3. 接着岳小姐就把远程库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 别名 分支名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Er0zDHjR-1672321278490)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20221229203347837.png)]

查看文件内容

在这里插入图片描述

5.5、克隆远程库到本地

git clone 远程库地址

clone会做如下操作:

  1. 拉取代码
  2. 初始化本地库
  3. 创建别名

5.6、GitHub团队内协作

管理员设置用户权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iIWdacBX-1672321278491)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20221229204225112.png)]

在这里插入图片描述

在这里插入图片描述

然后把链接分享给用户,用户登录他的github,粘贴该链接,点击同意即可成为成员

5.7、GitHub跨团队协作

  1. 把别人的项目fork一份到自己的远程库中

  1. 在自己远程库中可以看到fork的仓库

在这里插入图片描述

  1. clone到本地库中,然后进行修改
git clone 仓库地址

注意:本地修改后的代码在别人的项目中是看不到的,只有在你自己fork的那个仓库看得到

  1. 把你修改的代码pull requests给原作者审核

在这里插入图片描述

  1. 原作者审核后,如果感觉写的可以,再把你写的代码合并

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-we4DSX6e-1672321278494)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20221229210733523.png)]

猜你喜欢

转载自blog.csdn.net/weixin_53249168/article/details/128488434