Git和GitHub学习笔记
1. Git概述
免费、开源的分布式版本控制系统
1.1 版本控制
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
1.2 版本控制工具
集中式版本控制工具
分布式版本控制工具
1.3 Git发展历史

1.3 Git工作机制

1.4 Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般成为远程库
1.4.1 局域网
GitLab
1.4.2 互联网
GitHub(外网)
Gitee码云(国内网站)
2. Git安装
下载链接:https://www.git-scm.com/download/win

下载对应的版本安装即可
3. 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 版本号 | 版本穿梭 |
3.1 设置用户签名
签名的作用是区分不同的操作者。Git首次安装必须设置一下用户签名,否则无法提交代码。
$ git config --global user.name 用户名 # 设置用户名
$ git config --global user.email 邮箱 # 设置邮箱
$ cat ~/.gitconfig # 查看配置文件
[user]
name = SunChuanfu
email = 2271204754@qq.com
3.2 初始化本地化库
Administrator@DESKTOP-5QFLFRG MINGW64 /e/PythonStudy/Git/git-test/git-demo
$ git init
Initialized empty Git repository in E:/PythonStudy/Git/git-test/git-demo/.git/
3.3 查看本地库状态
$ git status # 查看本地库状态
首次查看本地库状态:

$ git status
On branch master # 当前分支在master
No commits yet # 当前没有提交过文件
nothing to commit # 当前没有文件需要提交
3.4 新增文件
新增文件hello.txt,并查看本地库状态

Untracked files: # 未被追踪的文件 当前hello文件处于工作区但未被追踪,不在暂存区
$ git add hello.txt # 当文件hello.txt添加到暂存区
3.5 添加到暂存区
$ git add hello.txt # 添加hello.txt到暂存区
再次查看本地库状态:

$ git rm --cached hello.txt # 删除暂存区的hello.txt
3.6 提交本地库
git commit -m 版本信息 # 提交hello.txt到本地库
查看版本信息
$ git reflog # 查看历史记录 显示前7位版本号
$ git log # 查看日志 更加详细 显示全部版本号


3.7 版本穿梭
查看所有版本信息
git reflog
git log
实现各个历史版本之前的移动:底层移动head指针
$ git reset --hard 版本号
$ git reset --hard fd9b186 # 切换到first commit 版本
切换前

切换后
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3zrxNpC-1642756450042)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220120132602968.png)]](https://file.cfanz.cn/uploads/png/2022/01/21/11/87V612P41f.png)
4 分支操作
4.1 分支概述
含义:几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。
优点:同时并行推进多个功能开发,提高开发效率各个分支在开发工程中互不影响。
4.2 分支操作
| 命令名称 | 作用 |
|---|---|
| git branch 分支名 | 创建分支 |
| git branch -v | 查看分支 |
| git checkout 分支名 | 切换分支 |
| git merge 分支名 | 把指定的分支合并到当前分支上 |
4.2.1 查看分支

其中路径后边(master)即是当前分支
4.2.2 创建分支
创建分支test并查看所有分支

4.2.3 切换分支
切换到test分支

4.2.4 合并分支
- 非冲突合并:将test 合并到master分支

在test分支中的修改已经在master中显示出:合并成功

- 冲突合并:
代码冲突:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改方案。Git无法替代我们决定使用哪一个,必须认为决定新代码内容
解决冲突:自己修改文件 ,提交暂存区,提交本地库,不带文件名
实例:
master 中内容hello.txt改为,再提交本地库


test中的内容hello.txt改为,再提交本地库

再次test 合并到master分支
自动合并失败,进入手动合并界面,此时hello.txt中内容为,此时进入手动合并过程

假设保存test中的修改,
1、将hello.txt其他的删除即可,再进行保存

2、将hello.txt提交到暂存区

3、将hello.txt提交到本地库(注意:不要带文件名 hello.txt)

手工合并完成
5 团队协作
团队协作模式:
团队内协作

跨团队协作

6. Github
GitHub网址: https://github.com/

6.1 创建远程仓库
登录GitHub 网址

为远程仓库创建名字点击创建即可

6.2 远程仓库操作
| 命令名称 | 作用 |
|---|---|
| git remote -v | 查看当前所有远程地址别名 |
| git remote add 别名 远程地址 | 起别名 |
| git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
| git clone 远程地址 | 将远程仓库的内容克隆到本地 |
| git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与当前分支直接合并 |
6.2.1 为远程仓库地址创建别名并且查看
复制远程仓库地址

创建别名并且查看别名

6.2.2 将本地分支推送到远程仓库(Push)
将本地master分支推送到远程仓库

授权

推送成功界面

此时访问github账号发现多了一个master分支
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HxVRiDq-1642756450065)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220121123323325.png)]](https://file.cfanz.cn/uploads/png/2022/01/21/11/Ba23L0f20b.png)
6.2.3 将远程仓库拉取到本地仓库(pull)
将远程仓库中的hello.txt最后添加一行 web modify

此时本地仓库的hello.txt内容依旧为

复制远程仓库地址

拉取
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i72IWPxV-1642756450069)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220121132540573.png)]](https://file.cfanz.cn/uploads/png/2022/01/21/11/1P7204P90X.png)
提示一行新增,此时查看本地库状态,查看hello.txt内容

6.2.4 clone 代码
Git文件夹下新建git-xiaolan模拟小兰用户克隆,由于windows只能识别一个用户,故需要将原来的CreateBubble凭据删掉

进行clone,注意公共库的clone不需要任何账户登录,只需要远程仓库的地址

clone 时同时完成:1.拉取代码 2.初始化本地库 3.创建别名,别名自动为origin

6.2.5 团队内协作:邀请进入团队
演示:computercreator和CreateBubble团队内合作

将computercreater邀请到CreateBubble的管理成员中




此时computercreator就可以推送和拉取代码,进行团队内协作
6.2.6 跨团队协作:

演示:computercreator和CreateBubble团队外合作
1.computercreator fork CreateBubble项目


2.computercreator进行修改hello.txt保存修改

3.computercreator创建新的pull request 请求



4. CreateBubble 接受请求

5. 审核没有错误,进行合并

合并完成后

6.2.7 ssh免密登录

查看本地是否有ssh秘钥
C:\Users\你的登录用户 查看当前目录下是否有.ssh文件,如果有则删除
生成秘钥
$ ssh-keyger -t rsa -C 你的github邮箱 # 生成秘钥

生成秘钥后,进入.ssh文件,查看并赋值公钥




成功生成ssh

ssh拉取测试 此时的本地还未修改

获取ssh链接

拉取pull
$ git pull git@github.com:CreateBubble/git-demo.git master # ssh地址 分支


拉取测试成功
push测试:在本地hello.txt文件最后添加 ssh_push_test
push到远程库
$ git push git@github.com:CreateBubble/git-demo.git master # ssh地址 分支












