1.Git结构
2.Git和代码托管中心
- 局域网环境下
- GitLab服务器
- 外网环境下
- GitHub
- 码云
3.Git本地库初始化
git init
4.设置签名
-
项目级别/仓库级别:仅在当前本地范围内有效
-
git config user.name Allen
-
git config user.email yx_endeavor@163.com
-
信息保存位置 ./config 文件
-
-
系统用户级别:登录当前操作系统的用户范围
-
git config --global user.name Allen
-
git config --global user.email yx_endeavor@163.com
-
信息保存位置 宿主目录 cd ~ /.gitconfig 文件
-
-
级别优先级
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别
- 如果只有系统用户级别签名,就以系统用户级别签名为准
5.基本操作
5.1.状态查看操作
git status #查看工作区、暂存区状态
5.2.添加操作
git add [filename] #将工作区的 "新建/修改" 添加到暂存区
5.3.提交操作
git commit -m "commit message" [filename] #将暂存区的内容提交到本地库
5.4.查看历史记录操作
git log
# 多屏控制显示方式:
# 空格向下翻页
# b向上翻页
# q退出
git log --pretty=oneline
git log --oneline
git reflog
HEAD@{移动到当前版本需要步数}
5.5.前进后退
-
本质:
-
基于索引值的操作(推荐):
- git reset --hard [局部索引值]
- git reset --hard c820814
-
使用’ ^’ 符号代表:只能后退,几个 ‘^’ 代表退几步
- git reset --hard HEAD^
-
使用~符号:只能后退
- git reset --hard HEAD~n
- n表示后退的步数
5.6.reset 命令的三个参数对比
- –soft参数:
- 仅仅在本地库移动HEAD指针
- –mixed参数:
- 在本地库移动HEAD指针
- 重置暂存区
- –hard参数
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
57.删除文件并找回
-
前提:删除前,文件存在时的状态提交到了本地库
-
操作:git reset --hard[指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录;
- 删除操作尚未提交到本地库:指针位置使用HEAD
5.8.比较稳健差异
-
git diff [文件名] # 将工作区中的文件和暂存区进行比较
-
git diff [本地库历史版本] [文件名] # 将工作区中的文件与本地库历史记录比较
-
不带文件名表示比较多个文件
5.9.命令帮助
6.分支管理
6.1.什么是分支?
在版本控制过程中,使用多条线同时推进多个任务.
6.2.分支操作
-
创建分支
git branch [分支名]
-
查看分支
git branch -v
-
切换分支
git checkout [分支名]
-
合并分支
- 第一步:切换到接受修改的分支(被合并,增加新内容)上,git checkout [分支名]
- 第二部:执行merge命令 git merge [分支名]
-
解决冲突
-
冲突的表现
-
冲突的解决:
- 第一步:编辑文件,删除特殊符号;
- 第二步:把文件修改到满意程度,保存退出;
- 第三步:git add [文件名]
- 第四部:git commit -m “日志信息”;
- 注意:此时commit不能带文件名
-
7.Github
7.1.在本地库创建远程库地址的别名
#查看当前所有远程库地址别名
git remote -v
#改别名
git remote add [别名] [远程库地址]
7.2.推送
#格式
git push [别名] [分支名]
#举例
git push origin master
7.3.克隆
命令:
git clone [远程地址]
三个效果:
- 完整的把远程库下载到本地
- 创建origin远程地址别名
- 初始化本地库
7.4.拉取
- pull = fetch + merge
- git fetch [远程库地址别名] {远程分支别名]
- git merge [远程库地址别名/远程分支别名]
7.5.解决冲突
要点:
- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取;
- 拉取下来后如果进入冲突状态,则按照 “分支冲突解决” 操作解决即可。
8.SSH登录
-
进入当前用户的家目录
cd ~
-
删除.ssh目录
rm -rf .ssh
-
运行命令生成.ssh密钥目录
ssh-keygen -t rsa -C [Github邮箱] #注意:C是大写的
-
进入.ssh 目录查看文件列表
-
查看 id_rsa.pub文件内容
-
复制 id_rsa.pub 文件内容,登录GitHub,点击用户头像→Setting→SSH and GPGkeys
-
New SSH key
-
输入复制的密钥信息
-
回到 git bash 创建远程库别名
git remote add origin_ssh [远程库地址 ssh] #git@github.com:Allen-HDs/huashan.git
-
推送文件进行测试
git push origin_ssh master
9.Git工作流
9.1.分类
-
集中式工作流:
像SVN一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到Master这个分支上。
-
GItFlow工作流
GitFlow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更为流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
-
Forking工作流
Forking工作流是在GitFlow基础上,充分利用了Git的Fork和pull request的功能,以达到代码的审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受不信任贡献者的提交。
9.2GitFlow工作流
10.Git遇到的错误:
clone时遇到这个error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
问题和解决方法都包含在图里面了,记录一下。
11.GitHUb骚操作
11.1 in 关键词限制搜索范围
公式:xxx关键词 in:name 或 description 或 readme
- xxx in : name 项目名包含 xxx 的
- xxx in : description 项目描述包含 xxx 的
- xxx in : readme 项目的readme文件中包含xxx的
- 组合使用: xxx in : name,readme
11.2 stars 或 fork数量关键词去查找
公式:xxx关键词 stars 通配符 :> 或者 :>=
区间范围数字 数字1…数字2
组合使用:springboot forks:100…200 stars:80…100
11.3 awesome 加强搜索
公式:awesome 关键词
awesome系列一般是用来收集学习、工具、书籍类相关的项目
例如:awesome redis
11.4 高亮显示某一行或某多行代码
11.5 项目内搜索
英文 t
11.6 搜索某个地区内的大佬
公式:location:地区 language:语言
搜索合肥的Java方向的用户:location:hefei language:java