
Git 版本控制核心命令与最佳实践
本文详细介绍了 Git 版本控制系统的核心概念、安装配置、仓库操作及工作流。涵盖分支管理、远程协作、冲突解决、高级操作如贮藏与变基,以及撤销恢复和子模块等实用技巧。提供了提交规范、分支策略等最佳实践,并列举了常见问题解决方案与命令速查表,旨在帮助开发者掌握 Git 从入门到精通的全流程。

本文详细介绍了 Git 版本控制系统的核心概念、安装配置、仓库操作及工作流。涵盖分支管理、远程协作、冲突解决、高级操作如贮藏与变基,以及撤销恢复和子模块等实用技巧。提供了提交规范、分支策略等最佳实践,并列举了常见问题解决方案与命令速查表,旨在帮助开发者掌握 Git 从入门到精通的全流程。


修改文件 → git add → 暂存区 → git commit → 已提交
# Ubuntu/Debian
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
# macOS (Homebrew)
brew install git
# Windows
# 下载安装包:https://git-scm.com/download/win
# 设置用户名和邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
# 设置默认编辑器
git config --global core.editor "code --wait" # VS Code
# 查看配置
git config --list
# 设置别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
/etc/gitconfig~/.gitconfig.git/config# 新建仓库
mkdir project && cd project
git init
# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git # 浅克隆(仅最新提交)
.git/
├── HEAD # 当前分支指针
├── config # 仓库配置
├── objects/ # 数据对象
├── refs/ # 分支和标签指针
│ ├── heads/ # 本地分支
│ └── tags/ # 标签
└── index # 暂存区文件
# 1. 修改文件
echo "Hello World" > file.txt
# 2. 查看状态
git status
# 3. 添加到暂存区
git add file.txt
git add . # 添加所有变更
git add -p # 交互式添加(部分添加)
# 4. 提交
git commit -m "Add initial file"
git commit -am "修改说明" # 跳过 add 直接提交已跟踪文件
# 5. 查看历史
git log
git log --oneline --graph --all # 图形化查看
git commit -m "feat: 添加用户登录功能 - 实现 JWT 认证 - 添加登录 API 端点 - 完善错误处理 Close #123"
推荐使用约定式提交规范:
- feat: 新功能
- fix: bug 修复
- docs: 文档变更
- style: 格式变更
- refactor: 重构代码
- test: 测试变更
- chore: 构建或辅助工具变更
# 创建分支
git branch feature-login
git checkout -b feature-login # 创建并切换
# 切换分支
git checkout main
git switch main # Git 2.23+ 推荐方式
# 合并分支
git checkout main
git merge feature-login
# 删除分支
git branch -d feature-login # 安全删除
git branch -D feature-login # 强制删除未合并分支
# 重命名分支
git branch -m old-name new-name
# 合并(保留完整历史)
git checkout main
git merge feature
# 变基(线性历史)
git checkout feature
git rebase main
# 交互式变基(修改历史)
git rebase -i HEAD~3 # 修改最近 3 个提交
注意事项:不要在公共分支上变基(会重写历史),变基后需要强制推送:
git push --force-with-lease。团队协作时优先使用合并。
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 查看远程
git remote -v
# 重命名远程
git remote rename origin upstream
# 移除远程
git remote remove origin
# 拉取更新
git fetch origin # 仅获取元数据
git pull origin main # fetch + merge
git pull --rebase # fetch + rebase(推荐)
# 推送分支
git push origin main
git push -u origin main # 设置上游跟踪
# 删除远程分支
git push origin --delete feature-old
当多人修改同一文件时:
# 1. 拉取最新代码(会提示冲突)
git pull origin main
# 2. 打开冲突文件
<<<<<<< HEAD
本地修改内容
=======
远程修改内容
>>>>>>> commit-hash
# 3. 手动解决冲突后
git add resolved-file.txt
git commit -m "解决合并冲突"
git push
# 临时保存未提交的修改
git stash
# 查看贮藏列表
git stash list
# 应用贮藏
git stash apply stash@{0}
# 创建新分支并应用贮藏
git stash branch new-feature
# 删除贮藏
git stash drop stash@{0}
git bisect start
git bisect bad # 当前版本有问题
git bisect good v1.0 # v1.0 版本正常
# 测试当前版本后标记结果
git bisect good # 如果当前版本正常
git bisect bad # 如果当前版本有问题
# 结束后重置
git bisect reset
# 修改最近一次提交
git commit --amend
# 交互式重写多个提交
git rebase -i HEAD~3
# 选项说明:
# pick: 使用提交
# reword: 修改提交信息
# edit: 修改提交内容
# squash: 合并到前一个提交
# fixup: 合并并丢弃提交信息
# drop: 删除提交
# 安装 Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.psd"
git lfs track "*.zip"
# 查看跟踪的文件
git lfs ls-files
# 放弃单个文件修改
git checkout -- filename.txt
# 放弃所有修改
git restore .
# Git 2.23+
git checkout -- .
git reset HEAD filename.txt
git restore --staged filename.txt # Git 2.23+
# 撤销上一次提交(保留修改)
git reset --soft HEAD~1
# 完全撤销提交(丢弃修改)
git reset --hard HEAD~1
# 恢复误删的提交
git reflog # 查找提交哈希
git reset --hard <commit-hash>
# 查看删除历史
git log --diff-filter=D -- path/to/file
# 恢复文件
git checkout <commit-hash>^ -- path/to/file
# 添加子模块
git submodule add https://github.com/user/lib.git
# 克隆包含子模块的项目
git clone --recurse-submodules https://github.com/user/project.git
# 更新子模块
git submodule update --init --recursive
# 创建工作树
git worktree add ../hotfix hotfix-branch
# 列出工作树
git worktree list
# 移除工作树
git worktree remove hotfix-branch
# .git/hooks/pre-commit
#!/bin/sh
# 运行代码检查
npm run lint
# .git/hooks/pre-push
#!/bin/sh
# 运行测试
npm test
pre-commit: 提交前运行prepare-commit-msg: 准备提交信息commit-msg: 验证提交信息post-commit: 提交完成后pre-receive: 处理推送前update: 按分支处理post-receive: 推送完成后最佳实践:使用 Husky 管理 Git 钩子
main/master(稳定版)develop(集成环境)feature/*(新功能开发)hotfix/*(紧急修复)release/*(版本准备)--force-with-lease 代替 --force# 仓库维护
git gc --auto
# 清理历史大文件(使用 BFG)
bfg --delete-files '*.zip' my-repo.git
# 浅克隆大型仓库
git clone --depth 1 https://github.com/large-repo.git
# 保留文件但从 Git 历史中移除
git filter-branch --tree-filter 'rm -f sensitive.txt' HEAD
# 更高效的工具
git filter-repo --invert-paths --path sensitive.txt
# 1. 创建新分支保存当前状态
git branch temp-branch
# 2. 重置 main 分支
git checkout main
git reset --hard origin/main
# 3. 切换到新分支继续工作
git checkout temp-branch
# 撤销合并提交
git revert -m 1 <merge-commit-hash>
# 忽略 SSL 验证(临时解决)
git config --global http.sslVerify false
# 永久解决方案:更新 CA 证书
sudo apt-get install ca-certificates
# 显示 UTF-8 文件名
git config --global core.quotepath false
| 类别 | 命令 | 描述 |
|---|---|---|
| 基础 | git init | 初始化仓库 |
git clone <url> | 克隆仓库 | |
git status | 查看状态 | |
| 提交 | git add <file> | 添加文件到暂存区 |
git commit -m "msg" | 提交变更 | |
git commit --amend | 修改上次提交 | |
| 分支 | git branch | 列出分支 |
git checkout <branch> | 切换分支 | |
git merge <branch> | 合并分支 | |
| 远程 | git fetch | 获取远程更新 |
git pull | 拉取并合并 | |
git push | 推送到远程 | |
| 撤销 | git restore <file> | 撤销工作区修改 |
git reset <commit> | 重置到指定提交 | |
git revert <commit> | 创建撤销提交 | |
| 日志 | git log | 查看提交历史 |
git diff | 查看差异 | |
| 高级 | git stash | 暂存变更 |
git rebase | 变基操作 | |
git bisect | 二分查找问题 |

提示:使用
git help <command>查看命令详细帮助 实践是最好的学习方式,多在实际项目中应用这些命令,逐渐形成自己的工作流。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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