引言
Git 是一个免费、开源的分布式版本控制系统(Version Control System,VCS),核心作用是对项目的代码/文件进行版本管理,追踪文件的修改记录,实现多人协作开发,防止代码丢失或误改。
简单来说,Git 能帮我们解决以下开发痛点:
- 代码写崩了,能一键回滚到之前能运行的版本;
- 多人开发同一个项目,不会互相覆盖对方的代码;
- 可以同时开发多个功能,互不影响,功能完成后再合并到主项目;
- 所有修改都有记录,谁改了代码、改了什么、什么时候改的,一目了然;
系统介绍 Git 版本控制系统,涵盖环境配置、核心原理、分支管理、远程协作及高级技巧。内容包括工作区、暂存区与本地仓库的流转关系,常用命令如 add、commit、push、pull 的使用,以及 reset、merge、rebase 等进阶操作。此外提供.gitignore 配置、冲突解决策略、reflog 数据恢复方法及大厂分支规范。文末总结面试常考点,助力开发者掌握 Git 核心逻辑,提升团队协作效率。
Git 是一个免费、开源的分布式版本控制系统(Version Control System,VCS),核心作用是对项目的代码/文件进行版本管理,追踪文件的修改记录,实现多人协作开发,防止代码丢失或误改。
简单来说,Git 能帮我们解决以下开发痛点:
官网下载地址:https://git-scm.com/downloads 国内镜像下载:https://registry.npmmirror.com/binary.html?path=git-for-windows/
验证是否安装成功:打开终端输入 git --version,显示版本号即成功。
每次提交代码都会记录提交者的用户名和邮箱,全局只需要配置一次。
# 配置全局用户名
git config --global user.name "你的用户名"
# 配置全局邮箱
git config --global user.email "你的邮箱地址"
# 查看所有全局配置
git config --global --list
# 配置 Git 默认编辑器为 VS Code
git config --global core.editor "code --wait"
# 配置中文显示(解决乱码)
git config --global core.quotepath false
所有的 Git 命令,本质都是在这三个区域之间转移文件。
工作区(写代码) → git add → 暂存区(待提交) → git commit → 本地仓库(永久保存版本)
git init
git clone https://gitee.com/xxx/xxx.git
# 1. git status 查看文件状态
git status
# 2. git add 把工作区的修改加入暂存区
git add . # 把所有修改的文件全部加入暂存区
# 3. git commit 把暂存区的内容提交到本地仓库
git commit -m "提交说明:比如 完成登录功能、修复首页样式 bug"
核心规范:
commit -m的提交说明一定要简洁、清晰、有意义。
# 查看所有提交历史
git log
# 简洁版查看
git log --oneline
# 查看最近 3 条
git log --oneline -3
# 撤销指定文件的工作区修改
git checkout -- 文件名
# 撤销工作区所有文件的修改
git checkout -- .
# 把指定文件从暂存区撤回工作区
git reset HEAD 文件名
# 把所有文件从暂存区撤回工作区
git reset HEAD .
需要提交 ID,通过 git log --oneline 查看。
# 软回滚:只回滚本地仓库,暂存区和工作区保留
git reset --soft 提交 ID
# 混合回滚:回滚本地仓库和暂存区,工作区保留(默认)
git reset --mixed 提交 ID
# 硬回滚:回滚本地仓库、暂存区、工作区,所有修改丢弃
git reset --hard 提交 ID
小技巧:回滚到上一个版本可用
git reset --hard HEAD^。
# 撤销指定提交的修改,生成一个新的提交
git revert 提交 ID
区别:
reset删除历史提交,revert新增反向提交,不改变历史,更安全。
分支就像项目的平行宇宙,可以在新分支里开发新功能,不影响主项目。
# 1. 查看所有分支
git branch
# 2. 新建分支
git branch 分支名
# 3. 新建分支并切换(最常用)
git checkout -b 分支名
# 4. 切换到已有分支
git checkout 分支名
# 5. 合并分支
git merge 分支名
# 6. 删除分支
git branch -d 分支名
冲突产生的原因:两个分支修改了同一个文件的同一行代码。
解决步骤:
<<<<<<<、=======、>>>>>>>);git add 冲突文件名 → git commit -m "解决分支冲突"。# 查看当前关联的远程仓库地址
git remote -v
# 关联远程仓库
git remote add origin https://gitee.com/xxx/xxx.git
# 拉取远程代码到本地
git pull origin 分支名
# 推送本地代码到远程仓库
git push origin 分支名
feature/xxx 或 fix/xxx。# 暂存工作区的所有修改
git stash
# 恢复最近一次的暂存记录
git stash pop
# 清空所有暂存记录
git stash clear
# 把指定的提交从一个分支复制到另一个分支
git cherry-pick 提交 ID
# 在当前分支执行,把当前分支变基到目标分支
git rebase 目标分支
原则:永远不要在公共分支上执行 git rebase。
# 打标签
git tag v1.0.0
# 查看所有标签
git tag
# 推送标签到远程仓库
git push origin v1.0.0
在项目根目录新建 .gitignore 文件:
node_modules/
dist/
build/
*.log
.idea/
.env
git reset HEAD 文件名 撤回。git cherry-pick 复制提交。git reflog 找回。git revert 撤销,写入 .gitignore。git reflog 找回。# 查看所有本地 Git 操作记录
git reflog
找回代码步骤:
git reflog,找到丢失代码前的最后一次操作 ID;git reset --hard 操作 ID,恢复状态。# 配置别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.lg "log --oneline"
理解工作区→暂存区→本地仓库的流转关系,理解分支的概念。
遇到问题、踩坑、冲突,都是好事。Git 有 git reflog 万能救星。
先掌握 add、commit、push、pull、branch、merge、reset,再学习 stash、cherry-pick、rebase。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online