Git
对于Git一些操作 通过git三个区来理解

首先,初始化吧
1 | git init |
Workspace:工作区
本地电脑上的东西都在这个区
从远程仓库克隆到本地
1 | git clone https://github.com/username/repository.git |
从远程仓库克隆特定分支到本地
1 | git clone -b branch-name https://github.com/username/repository.git |
远程仓库有多个分支时,切换到想要更新的分支
1 | git checkout branch-name |
(获取fetch 然后 合并merge ) 或者 pull抓取 等同这两个操作
1 | git fetch origin |
Index / Stage:暂存区
要提交 首先得把工作区的更改放到暂存区
提交某个文件
1 | git add filename.txt |
**提交全部文件 **
1 | git add . |
将暂存区的文件覆盖给工作区
1 | git restore filename.txt |
将暂存区的文件移除
1 | git rm --cached filename.txt |
了解工作区与暂存区文件的状态
1 | git status |
Repository:仓库区(或本地仓库)
版本回退(将工作区暂存区的内容回退到某个版本)
查看提交历史 获得版本号
1 | git log --oneline |
版本回退命令
1 | git reset --soft 版本号 |

三者区别在于是否会覆盖 工作区和暂存区未跟踪的文件
要把暂存区的变更提交到远程仓库
1 | git commit -m "提交的注释" |
Remote:远程仓库
推送到master分支
1 | git push origin master |
推送本地分支到远程仓库
1 | git push origin feature-branch |
设置推送的新分支为上游分支,之后每次提交只需用 git push
1 | git push -u origin feature-branch |
合并dev分支到master分支 然后上传
1 | git checkout master |
分支管理
分支本质上是指向提交节点的可变指针,默认是master或main。分支可以用来开发新需求或修理bug,保证主线代码随时可用,开发完成后合并到主分支上。
HEAD指针影响工作区/暂存区的代码状态
创建和切换分支
1 | 创建 |
分支功能完成后,合并回到主分支
1 | 切回到要合入的分支上: |
快进合并和三方合并
快进合并:当前分支是目标分支的祖先分支,git会进行快速合并。分支的指针会移动到目标分支的位置,不会创建的新的合并提交。
类似这样
1 | A (main) |
三方合并:当前分支不是目标分支的祖先分支(当前分支有了新的提交)git会进行三方合并,合并会创建一个新的合并提交
1 | 最初 |
rebase和merge对比
1 | 当前 |
合并冲突
冲突的概念:一次合并中,不同的分支对于同一文件的同一部分内容不同,git无法干净的合并,产生合并冲突
解决:找到冲突文件并手动解决,再进行一次提交
冲突是可以避免的,避免方式例如
1.按页面划分不同分支开发
2.公共代码在统一文件夹维护
3.Node等软件版本统一,npm 包统一下载
其他
忽略文件.gitignore
概念:.gitignore 文件可以让 git 彻底忽略跟踪指定文件,让 git 仓库更小更快,避免重复无意义的文件管理
1.项目根目录新建 .gitignore 文件
2.填入相应配置来忽略指定文件

常用命令
| 命令 | 作用 | 注意 |
|---|---|---|
| git -v | 查看 git 版本 | |
| git init | 初始化 git 仓库 | |
| git add 文件标识 | 暂存某个文件 | 文件标识以终端为起始的相对路径 |
| git add . | 暂存所有文件 | |
| git commit -m ‘说明注释’ | 提交产生版本记录 | 每次提交,把暂存区内容快照一份 |
| git status | 查看文件状态 - 详细信息 | |
| git status -s | 查看文件状态 - 简略信息 | 第一列是暂存区状态,第二列是工作区状态 |
| git ls-files | 查看暂存区文件列表 | |
| git restore 文件标识 | 从暂存区恢复到工作区 | 如果文件标识为 . 则恢复所有文件 |
| git rm –cached 文件标识 | 从暂存区移除文件 | 不让 git 跟踪文件变化 |
| git log | 查看提交记录 - 详细信息 | |
| git log –oneline | 查看提交记录 - 简略信息 | 版本号 分支指针 提交时说明注释 |
| 命令 | 作用 | 注意 |
|---|---|---|
| git reflog –oneline | 查看完整历史 - 简略消息 | 包括提交,切换,回退等所有记录 |
| git reset 版本号 | 切换版本代码到暂存区和工作区 | –soft 模式保留暂存区和工作区原本内容 –hard 模式不保留暂存区和工作区原本内容 –mixed 模式不保留暂存区,工作区保留(默认) 先覆盖到暂存区,再用暂存区对比覆盖工作区 |
| git branch 分支名 | 创建分支 | |
| git branch | 查看本地分支 | |
| git branch -d 分支名 | 删除分支 | 请确保记录已经合并到别的分支下,再删除分支 |
| git checkout 分支名 | 切换分支 | |
| git checkout -b 分支名 | 创建并立刻切换分支 | |
| git merge 分支名 | 把分支提交历史记录合并到当前所在分支 | |
| 命令 | 作用 | 注意 |
|---|---|---|
| git remote add 远程仓库别名 远程仓库地址 | 添加远程仓库地址 | 别名唯一,地址是 .git 结尾的网址 |
| git remote -v | 查看远程仓库地址 | |
| git remote remove 远程仓库别名 | 删除远程仓库地址 | |
| git pull 远程仓库别名 分支名 | 拉取 | 完整写法:git pull 远程仓库别名 远程分支名:本地分支名 等价于:git fetch 和 git merge |
| git push 远程仓库别名 分支名 | 推送 | 完整写法:git push 远程仓库别名 本地分支名:远程分支名 -u:建立通道后以后可以简写 git push |
| git pull –rebase 远程仓库别名 分支名 | 拉取合并 | 合并没有关系的记录 |
| git clone 远程仓库地址 | 克隆 | 从0得到一个远程的Git仓库到本地使用 |
基于husky的代码检查
husky 是一个 git hooks 工具 ( git的钩子工具,可以在特定时机执行特定的命令 )
例如可以在提交时检查代码错误
husky 配置
git初始化 git init
初始化 husky 工具配置 https://typicode.github.io/husky/
1 | pnpm dlx husky-init && pnpm install |
- 修改 .husky/pre-commit 文件(这里的pnpm lint是配置好了的)
1 | pnpm lint |
问题:默认进行的是全量检查,耗时问题,历史问题。
暂存区eslint校验
只对暂存区里新的内容进行规范检查
lint-staged 配置
- 安装
1 | pnpm i lint-staged -D |
- 配置
package.json
1 | { |
- 修改 .husky/pre-commit 文件
1 | pnpm lint-staged |


