一、Git 优势
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与 Linux 命令全面兼容
二、Git 程序安装
https://git-scm.com
三、Git 结构
四、Git 和 代码托管中心
- 局域网环境下
- GitLab 服务器
- 外网环境下
- GitHub
- 码云
五、本地库和远程库
团队内部协作
跨团队协作
六、Git 命令行操作
1、本地库初始化
- 命令:
git init
- 效果:
- 注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要随意修改
2、设置签名
- 形式:
- 用户名
- Email 地址
- 作用:区分不同开发人员的身份
- 辨析:这里的签名与登录远程库(代码托管中心)的账号密码没有任何关联
- 命令:
- 项目级别 / 仓库级别:仅在当前本地库范围内有效
git config user.name abcdefg
git config user.email abcdefg_pro@123.com
- 信息保存位置:
./.git/config
- 系统用户级别:登录当前操作系统的用户范围
git config --global user.name abcdefg
git config --global user.email abcdefg_pro@123.com
- 信息保存的位置:
~/.gitconfig
- 优先级:(就近原则)项目级别 > 系统用户级别
3、基本操作
- 状态查看操作
git status
查看工作区、暂存区状态- 添加操作
git add [file name]
将工作区的“新建/修改”添加到暂存区- 提交操作
git commit -m 'commit message' [file name]
将暂存区的内容提交到本地库- 查看历史记录
git log
(多屏显示控制方式:空格向下翻页;b 向上翻页;q 退出)
git log --pretty=oneline
git log --oneline
- 前进后退
- 本质
git reflog
- 基于索引值操作(推荐)
git reset --hard [局部索引值]
- 使用 ^ 符号:只能往后退
git reset --hard HEAD^
一个 ^ 表示后退一步,n 个表示后退 n 步- 使用 ~ 符号:只能后退
git reset --hard HEAD~n
表示后退 n 步- reset 命令的三个参数对比
- soft 参数:仅仅在本地库移动 HEAD 指针
- mixed 参数:在本地库移动 HEAD 指针,并重置暂存区
- head 参数:在本地库移动 HEAD 指针,并且重置暂存区和工作区
- 删除文件并找回
- 前提:删除前文件存在是的状态提交到了本地库
- 操作:
git reset --hard [指针位置]
- 比较文件差异
git diff [文件名]
:将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本]
:将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件
4、分支管理
在版本控制过程中,使用多条线同时推进多个任务。
好处:
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果其中一个分支失败不会对其他分支产生任何影响
分支操作
- 创建分支
git branch [分支名]
- 查看分支
git branch -v
- 切换分支
git checkout [分支名]
- 合并分支
- 切换到接受修改的分支上(被合并、增加新内容)上
git checkout [被合并分支名]
- 执行 merge 命令
git merge [有新内容分支名]
- 解决冲突
- 编辑文件,删除特殊符号
- 把文件修改到满意程度,保存退出
git add [文件名]
git commit -m "日志信息"
(此时 commit 不能带任何文件名)
七、Git 基本原理
哈希
- 不论输入的数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定
- 哈希算法确定,输入数据确定,输出数据能够保持不变
- 哈希算法确定,输入数据在变化,输出数据一定变化,而通常变化很大
- 哈希算法不可逆
Git 底层采用的是 SHA-1 算法
原理:
八、GitHub
1、创建远程库
2、在本地创建远程库地址别名
git remote -v
:查看当前所有远程地址别名
git remote add [别名] [远程库https地址]
3、推送操作
git push [别名] [分支名]
4、克隆
- 命令:
git clone [远程地址]
- 效果:
- 完整地把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
5、拉取
- pull = fetch + merge
git fetch [远程库地址别名] [远程分支名]
git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]
6、解决冲突
如果不是最新推送,必须先拉取
7、跨团队协作
点击 Fork
本地修改,然后推送到远程
对话
审核代码
将远程库拉取到本地
8、SSH 登录
进入当前用户的加目录
cs ~
删除 .ssh 目录
rm-rvf .ssh
运行命令生成 .ssh 密钥目录
ssh-keygen -t rsa -C abcdefg@123456.com
[注意:这里 -C 这个参数是大写]进入 .ssh 目录查看文件列表
cd .ssh
ls - lF
查看 id_rsa.pub 文件内容
cat id_rsa.pub
复制 id_rsa.pub 文件内容,登录 GitHub
New SSH Key
输入复制的密钥信息
回到 Git hash 创建远程地址别名
git remote add origin_ssh git@github.com:abcdefg@123456/[项目名称].git
推送文件进行测试