Git学习笔记
详情可参考廖雪峰Git教程
一、入门
1、 Git原理 —— 哈希
哈希是一个系列的加密算法, 各个不同的哈希算法虽然加密强度不同, 但是有以下几个共同点:
① 不管输入数据的数据量有多大, 输入同一个哈希算法, 得到的加密结果长度固定。
② 哈希算法确定, 输入数据确定, 输出数据能够保证不变
③ 哈希算法确定, 输入数据有变化, 输出数据一定有变化, 而且通常变化很大
④ 哈希算法不可逆
Git 底层采用的是 SHA-1 算法。哈希算法可以被用来验证文件。 原理如下图所示
2 、 Git 保存版本的机制
2.1 集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。 这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异 。
2.2 Git 的文件管理机制
Git 把数据看作是小型文件系统的一组快照。 每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。
为了高效, 如果文件没有修改,Git 不再重新存储该文件, 而是只保留一个链接指向之前存储的文件。 所以 Git 的工作方式可以称之为快照流。
3、 安装时的两点注意事项
4、 设置签名
形式: 用户名: tom
Email 地址: goodMorning@atguigu.com
作用: 区分不同开发人员的身份
辨析: 这里设置的签名和登录远程库(代码托管中心)的账号、 密码没有任何关系
命令 :git config(--global)user.name tom_pro
git config(--global) user.email goodMorning_pro@163.com
信息保存位置: ./.git/config 文件
二、操作命令
2.1 基础操作
-- 0 初始化为git仓库
git init
-- 1 状态查看
git status
查看工作区、 暂存区状态
-- 2 添加
git add [file name]
将工作区的“新建/修改” 添加到暂存区
-- 3 提交
git commit -m "commit message" [file name]
将暂存区的内容提交到本地库
-- 4 查看历史记录
git log
git reflog 【HEAD@{移动到当前版本需要多少步}】(显示所有的log)
git log --oneline (只显示过去的log)
多屏显示控制方式:空格-向下翻页 / b-向上翻页 / q-退出
-- 5 前进后退
(1)基于索引值操作[推荐]
git reset --hard [局部索引值]
git reset --hard a6ace91
(2)使用^符号: 只能后退
git reset --hard HEAD^^
注: 一个^表示后退一步, n个表示后退 n 步
(3)使用~符号: 只能后退
git reset --hard HEAD~n
注: 表示后退 n 步
-- 6 删除文件并找回
删除命令:git rm :用于从工作区和暂存区中删除文件
恢复命令:git rm --cached [文件名]:用于将暂存区的文件恢复到工作区
-----------------------------------------
【永久删除后找回】
前提: 删除前,文件存在时的状态提交到了本地库。(git add ~,git commit -m'uped' ~)
执行命令进行删除:git rm [文件名]
提交到本地库:git commit -m'deleted' ~
操作: 通过日志找回:git reflog
git reset --hard [指针位置]
ll 查看
删除操作已经提交到本地库: 指针位置指向历史记录
删除操作尚未提交到本地库: 指针位置使用 HEAD
注意:git只要在本地库发生操作,都会进行版本记录。
-- 7 比较文件差异(默认是工作区和暂存区文件进行比较)
git diff [文件名]:将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]:将工作区中的文件和本地库历史记录比较(不带文件名比较多个文件)
git diff HEAD git.txt //HEAD代表本地库最新版本指针
-- 8 提交远程库 git remote -v :查看当前所有远程地址别名 git remote add[远程地址别名] [远程地址]:添加远程地址,并起别名
git push [远程地址别名] [分支名]: 将分支推送到远程仓库
2.2 分支管理
在版本控制过程中, 使用多条线同时推进多个任务。
分支的好处?
- 同时并行推进多个功能开发, 提高开发效率
- 各个分支在开发过程中, 如果某一个分支开发失败, 不会对其他分支有任何影响。 失败的分支删除重新开始即可。 -- 创建分支git branch [分支名]
-- 查看分支
git branch -v
-- 切换分支
git checkout [分支名]
-- 查看并切换分支
git checkout -b 新分支名
git checkout -b 新分支名 origin 远程模板分支名
-- 合并分支
-- 第一步: 切换到接受修改的分支(被合并, 增加新内容) 上
git checkout [被合并分支名]
-- 第二步: 执行 merge 命令
git merge [有新内容分支名]
-- 其他命令
git branch -m 分支名称 创建并切换到指定分支
git branch -d 分支名称 删除分支
-- rebase【重点,常用】
git rebase原理:枚举变更的commit,以此变基(base 就是commit)
步骤:
git checkout deveolp
git rebase master
...出现冲突——>解决冲突...
处理完冲突后:
将变更 add进暂存区使用: git add .
继续下一个commit节点的rebase: git rebase --continue
...出现冲突——>解决冲突...
git add .
git rebase --continue
【多个分支同时coomit时会出现冲突:】
-- 冲突的解决【要先pull下来进行更新,再进行push】
第一步: 编辑文件, 删除特殊符号
第二步: 把文件修改到满意的程度, 保存退出
第三步: git add [文件名]
第四步: git commit -m "日志信息"
注意: 此时 commit 一定不能带具体文件名
三、团队协作
3.1 团队内部协作
3.2 跨团队协作fork
四、申请SSH
1、在GIt Bash中执行如下命令
cd ~/.ssh
ssh-keygen -t rsa -C 1390274401@qq.co(用户名)
一直回车回车,出现类似图形化界面,表示成功
2、ssh公钥位置:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
-- C:\Users\Timetellu\.ssh , 打开id_rsa.pub,复制 -- --------------------------------------------- github 和 码云都在“设置”里配置ssh 在克隆的时候,选择ssh,复制ssh地址 -- ------------------------------------------ git clone ssh地址 选择yes,远程仓库就clone下来了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
-- 进入当前用户的家目录 $ cd ~ -- 删除.ssh 目录 $ rm -rvf .ssh -- 运行命令生成.ssh 密钥目录 $ ssh-keygen -t rsa -C atguigu2018ybuq@aliyun.com [注意: 这里-C 这个参数是大写的 C] -- 进入.ssh 目录查看文件列表 $ cd .ssh $ ls -lF -- 查看 id_rsa.pub 文件内容 $ cat id_rsa.pub -- 复制 id_rsa.pub 文件内容, 登录 GitHub, 点击用户头像→Settings→SSH and GPG keys New SSH Key -- 输入复制的密钥信息 -- 回到 Git bash 创建远程地址别名 git remote add origin_ssh git@github.com:atguigu2018ybuq/huashan.git -- 推送文件进行测试
第一次使用Git上传本地项目到github上教程: https://www.cnblogs.com/sdcs/p/8270029.html
推荐学习视频:https://www.bilibili.com/video/av59634634
(idea+git) https://www.bilibili.com/video/av76485325?p=16
干货学习视频:https://www.bilibili.com/video/BV1BE411g7SV?t=305
一次彻底搞懂 Git Rebase https://www.codercto.com/a/45325.html
配套资料:
链接:https://pan.baidu.com/s/1A1KJh5K0s0U6dO-nVpp7MQ
提取码:236l