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 版本
切换前
切换后
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分支
6.2.3 将远程仓库拉取到本地仓库(pull)
将远程仓库中的hello.txt最后添加一行 web modify
此时本地仓库的hello.txt内容依旧为
复制远程仓库地址
拉取
提示一行新增,此时查看本地库状态,查看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地址 分支