Git 版本控制管理工具精要知识点总结归纳

_LEON_

关注

阅读 59

2022-04-13

一、Git

1. 集中式 vs 分布式

在这里插入图片描述

在这里插入图片描述

2. 初始化配置

// 初始化配置 git 用户名和邮件地址
git config --global user.name "username"
git config --global user.email "user-email"

3. 创建版本库

// 1. 初始化版本库
git init
// 2. 添加文件到仓库
git add readme.txt
// 3. 把文件提交到仓库
git commit -m "create readme.txt file"

4. 查看状态

// 1. 查看工作区状态
git status
// 2. 查看文件差异
git diff

5. 版本回退

// 1. 查看 commit 日志
git log
// 2. 查看 commit 日志且一行一行显示
git log --pretty=oneline
// 3. 回退到上一个版本,前提是未推送到远程仓库
git reset --hard HEAD^
// 4. 查看所有操作过的命令
git reflog

6. 工作区与暂存区

7. 管理修改

// 查看工作区中的文件与版本库中最新版本的区别
git diff HEAD -- readme.txt

8. 撤销修改

// 1. 撤销未添加到暂存区的修改
git restore readme.txt
// 2. 撤销添加到暂存区
git restore --staged readme.txt

9. 删除文件

// 1. 从版本库中删除文件并提交
git rm test.txt
git commit
// 2. 从版本库中恢复工作区已删除的文件

10. 远程仓库

// 1. 创建 SSH key
ssh-keygen -t rsa -C "springbear2020@163.com"
// 2. 将本地仓库与远程仓库相关联,origin 为远程库的名字
git remote add origin https://gitee.com/Spring-_-Bear/temp.git
// 3. 推送到远程库,第一次推送使用 -u 参数,将本地分支内容推送到远程分支,还会将本地的 master 分支和远程的 master 分支关联起来
git push -u origin master
// 4. 将本地 master 分支的最新修改推送到远程仓库
git push origin master
// 5. 查看远程仓库信息
git remoter -v
// 6. 解除本地仓库与远程仓库的关联关系
git remote rm origin
// 7. 从远程库克隆
git clone git@gitee.com:Spring-_-Bear/temp.git

11. 分支管理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

12. 创建与合并分支

// 1. 创建并切换到 dev 分支
git switch -c dev
// 2. 查看分支
git branch
// 3. 切换分支
git switch master
// 4. 合并分支到当前分支,Fast-forward - 直接将 master 指向 dev 的当前提交
git merge dev
// 5. 删除分支
git branch -d dev

13. 解决冲突

// 查看分支的合并情况
git log --graph --pretty=oneline --abbrev-commit

14. 分支管理策略

// 禁用 Fast forward 模式合并分支
git merge --no-ff -m "merge with no-ff" dev

在这里插入图片描述

在这里插入图片描述

15. Bug 分支

// 1. 隐藏当前分支的 “工作现场”
git stash
// 2. 查看隐藏的 “工作现场”
git stash list
// 3. 恢复工作现场并删除
git stash pop
// 4. 恢复到指定的工作现场
git stash apply stash@{0}
// 5. 删除指定的工作现场
git stash drop stash@{0}
// 6. 复制一个特定的提交到当前分支
git cherry-pick 9863d08

16. Feature 分支

// 强行删除没有被合并过的分支
git branch -D feature

17. 多人协作

// 1. 根据远程库的 dev 分支新建本地 dev 分支
git switch -c dev origin/dev
// 2. 将本地 dev 分支与远程 dev 分支进行关联
git branch --set-upstream-to=origin/dev dev
// 3. 从远程拉取
git pull

18. Rebase

19. 标签管理

// 1. 给指定的 commit 打上标签
git tag tag_name commit_id
// 2. 查看所有标签
git tag
// 3. 查看标签信息
git show tag_name
// 4. 创建标签同时指定标签描述
git tag -a tag_name -m "tag_describtion" commit_id
// 5. 删除本地标签
git tag -d tag_name
// 6. 推送本地标签到远程库
git push origin tag_name
// 7. 一次性推送本地所有标签到远程库
git push origin --tags
// 8. 删除已经推送到远程库的标签
// 8.1 先删除本地标签
git tag -d tag_name
// 8.2 删除远程库标签
git push origin :refs/tags/tag_name

20. 自定义 Git

// 配置 git 颜色
git config --global color.ui true

21. 忽略特殊文件

// 强制提交已被 .gitignore 忽略的文件
git add -f filename

22. 命令别名

git config --global alias.st status

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

23. 搭建 Git 服务器

// 1. 安装 git
sudo apt-get install git
// 2. 创建一个 git 用户,用来运行 git 服务
sudo adduser git
// 3. 收集所有需要登录的用户的公钥(id_rsa.pub),导入到 
/home/git/.ssh/authorized_keys
// 4. 初始化 git 仓库,git 就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 git 仓库纯粹是为了共享,所以不让用户直接登录到服务区上区修改工作区,并且服务器的 git 仓库通常都以 .git 结尾,把 owner 改为 git
sudo git init --bare sample.git
sudo chown -R git:git sample.git
// 5. 禁用 git 用户使用 shell 登录,编辑 /etc/passwd 文件完成,将上一行的内容改为下一行,修改成功后 git 用户可以正常通过 ssh 使用 git,但无法登录 shell
git:x:1001:1001:,,,:/home/git:/bin/bash 
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

24. 命令总结

序号命令功能
1git config --global user.name <name>配置全局用户名。省略 --global 参数则配置的当前 repo 的用户名
2git config --global user.email <email>配置全局用户邮箱。省略 --global 参数则配置的当前 repo 的邮箱
3git config --global --edit打开当前用户的 git 全局配置并编辑
4git config --global alias.<alias-name> <git-command>配置一个 git 命令的快捷方式
5git config --system core.editor <editor>配置文本编辑器
6git init <directory>在指定目录里下创建一个空的 repo。省略参数则在当前目录创建
7git add <directory>将指定目录的文件加入到暂存区。若参数是文件则将文件添加到暂存区
8git commint -m “<message>”提交暂存区的修改,使用指定的提交信息
9git commit -m <message> --amend将当前 staged 修改合并到最近一次的 commit 中
10git status查看仓库状态
11git log以缺省格式显示全部 commit 历史
12git log -<limit>限制 log 的显示数量
13git log --oneline每行显示一条 commit
14git log --author=“<pattern>”按提交者名字搜索并显示 commit
15git log --grep=“<pattern>”按指定内容搜索并显示 commit
16git log <since>…<until>显示指定范围的 commit。参数可以是 commit id、分支名称、HEAD 或任意相对位置
17git log – <file>仅显示包含指定文件修改的 commit
18git reflog显示本地 repo 的所有commit 日志
19git diff比较暂存区和工作区的修改
20git diff HEAD比较工作区和上一次 commit 后的修改
21git diff --cached比较工作区和上一次 commit 后的修改
22git revert <commit>回滚到指定的 commit
23git switch -c <branch>创建并切换到一个新分支。省略 -c 参数将切换到指定分支
24git branch显示本地 repo 的所有分支
25git log --graph显示图形化的 branch 信息
26git merge <branch>将指定的分支合并到当前分支
27git reset <file>将 file 从暂存区移除,但保持工作区不变
28git reset移除暂存区的所有修改,但不会影响到工作区
29git reset --hard移除所有暂存区的修改,并强制删除所有工作区的修改
30git reset <commit>将当前分支回滚到指定 commit,清除暂存区的修改,但保持工作区状态不变
31git reset --hard <commit>将当前分支回滚到指定 commit,清除暂存区的修改,并强制删除工作区的修改
32git remote add <name> <url>添加一个新的远程连接。用 <name> 作为远程库的名称
33git clone <repository>克隆一个指定的 repo 到本地,指定的 repo 可以是本地文件系统或者由 http、ssh 指定的远程路径
34git push <remote> <branch>将本地指定分支推送到远程库,若远程库中无此分支则自动创建
35git push <remote> --force将本地分支推送到远程库
36git push <remote> --tags本地所有的 tag 推送到远程库
37git pull <remote>从指定远程库抓取所有分支的 commit 并立刻合并到本地 repo
38git fetch <remote> <branch>从指定的远程库抓取指定分支的所有 commit 到本地 repo。省略 <branch> 参数将抓取远程库的所有修改
39git pull --rebase <reomote>抓取远程库所有分支,并以 rebase 模式并入本地 repo 而不是 merge
40git rebase <base>基于 <base> 对当前分支进行 rebase,<base> 可以是 commit、分支名称、tag 或相对于 HEAD 的 commit
41git rebase -i <base>以交互模式对当前分支做 rebase

二、SQL

1. 关系型数据库概述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 键约束

-- 给字段添加唯一约束
ALTER TABLE table_name ADD CONSTRAINT uni_name UNIQUE (name);

3. 数据查询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. MySQL

5. 实用 SQL 语句

-- 1. 插入或替换
REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
-- 2. 插入或更新
INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;
-- 3. 插入或忽略
INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
-- 4. 强制指定索引:在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是很多时候,数据库系统的查询优化器并不一定总是能使用最优索引。如果我们知道如何选择索引,可以使用 FORCE INDEX 强制查询使用指定的索引
SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;

6. 事务

名称描述
原子性(atomic)将所有 SQL 作为原子工作单元执行,要么全部执行,要么全部不执行
一致性(consistency)事务操作成功,所有数据的状态都是一致的
隔离性(isolation)如果有多个事务并发执行,事务之间必须隔离执行
持久性(duration)事务操作成功,对数据的修改被持久化存储
MySQL隔离级别脏读不可重复读幻读
读未提交(read uncommintted)YYY
读已提交(read committed)NYY
可重复读(repeatable read)NNY
可串行化(serializable)NNN

精彩评论(0)

0 0 举报