1. Git 命令行操作的必要性与优势
在版本控制领域,Git 早已成为事实标准。虽然市面上有各种图形化 Git 客户端(如 SourceTree、GitKraken),但掌握命令行操作仍然是开发者的核心能力。命令行不仅能在所有环境下通用(包括服务器环境),还能让你真正理解 Git 的内部工作机制。
我见过太多开发者因为只依赖图形界面,遇到复杂场景就束手无策。命令行操作的优势在于:
- 精确控制每个操作步骤
- 可组合使用各种参数应对特殊场景
- 通过管道与其他命令行工具配合
- 编写自动化脚本的基础
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Git 环境安装与基础配置
2.1 跨平台安装指南
不同操作系统的 Git 安装方式略有差异:
Windows 系统:
- 从官网下载最新安装包(当前最新版为 2.42.0)
- 安装时注意勾选"Add to PATH"选项
- 推荐选择"Use Git and optional Unix tools from the Command Prompt"(这将允许你在普通命令行中使用 Git)
注意:Windows 用户可能会遇到 CRLF 换行符问题,建议运行
git config --global core.autocrlf true
macOS 系统:
bash复制# 通过 Homebrew 安装
brew install git
# 或使用 Xcode 命令行工具
xcode-select --install
Linux 系统:
bash复制# Debian/Ubuntu
sudo apt-get install git
# CentOS/RHEL
sudo yum install git
2.2 基础身份配置
安装后首要任务是配置用户信息:
bash复制git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
推荐额外配置:
bash复制# 设置默认编辑器为 VSCode
git config --global core.editor "code --wait"
# 启用彩色输出
git config --global color.ui auto
# 设置默认分支名为 main(替代传统的 master)
git config --global init.defaultBranch main
3. 仓库创建与基础操作
3.1 初始化新仓库
bash复制# 创建新目录并初始化
mkdir my-project
cd my-project
git init
# 或直接克隆现有仓库
git clone https://github.com/user/repo.git
3.2 文件状态与提交周期
Git 文件生命周期:
- 工作目录(Untracked)
- 暂存区(Staged)
- 本地仓库(Committed)
常用状态检查命令:
bash复制# 查看详细状态
git status
# 简洁状态显示
git status -s
# 查看具体变更内容
git diff
git diff --cached # 查看已暂存的变更
3.3 提交最佳实践
bash复制# 添加特定文件
git add filename.ext
# 添加所有变更(慎用)
git add .
# 提交带描述信息
git commit -m "描述性提交信息"
# 修改上次提交(未推送时)
git commit --amend
提示:提交信息应遵循约定格式。第一行不超过50字符的摘要,空一行后是详细说明。例如:
code复制fix: 修复用户登录验证问题
- 修正了JWT令牌过期时间的计算错误
- 添加了刷新令牌的验证逻辑
4. 分支管理与协作
4.1 分支基础操作
bash复制# 查看所有分支
git branch -vva
# 创建新分支
git branch new-feature
# 切换分支
git checkout new-feature
# 或(Git 2.23+)
git switch new-feature
# 创建并切换分支
git checkout -b hotfix
4.2 合并与变基
合并(Merge):
bash复制git checkout main
git merge feature-branch
变基(Rebase):
bash复制git checkout feature-branch
git rebase main
重要区别:
- 合并保留历史原貌,适合公共分支
- 变基创造线性历史,适合本地整理提交
4.3 解决冲突
冲突文件会包含类似标记:
code复制<<<<<<< HEAD
当前分支内容
=======
合并分支内容
>>>>>>> branch-name
解决步骤:
- 编辑文件,保留需要的内容
- 删除冲突标记(<<<, ===, >>>)
- 标记为已解决:
git add filename - 继续操作:
git commit(合并)或git rebase --continue
5. 远程仓库协作
5.1 远程仓库配置
bash复制# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 修改远程URL
git remote set-url origin git@github.com:user/repo.git
5.2 推送与拉取
bash复制# 首次推送并设置上游分支
git push -u origin main
# 后续推送
git push
# 拉取远程变更
git pull
# 等同于
git fetch
git merge origin/main
5.3 高级推送技巧
bash复制# 强制推送(慎用!会覆盖远程历史)
git push --force
# 更安全的替代方案
git push --force-with-lease
# 删除远程分支
git push origin --delete branch-name
# 推送所有标签
git push --tags
6. 高级操作与问题排查
6.1 撤销与重置
bash复制# 撤销工作区修改
git checkout -- filename
# 取消暂存
git reset HEAD filename
# 回退到特定提交(慎用!)
git reset --hard commit-hash
# 恢复被删除的文件
git checkout commit-hash -- filename
6.2 储藏变更
bash复制# 储藏当前工作
git stash
# 查看储藏列表
git stash list
# 应用最近储藏
git stash apply
# 应用特定储藏
git stash apply stash@{n}
# 删除储藏
git stash drop stash@{n}
6.3 查找问题
bash复制# 查看提交历史
git log --oneline --graph --all
# 查找引入bug的提交
git bisect start
git bisect bad
git bisect good commit-hash
# 测试后标记当前提交为 good/bad
git bisect reset
# 查找包含特定字符串的提交
git log -S "search string"
7. 日常实用技巧
7.1 别名配置
在 ~/.gitconfig 中添加:
code复制[alias]
co = checkout
br = branch
ci = commit
st = status
last = log -1 HEAD
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
7.2 忽略文件配置
创建 .gitignore 文件示例:
code复制# 忽略所有 .a 文件
*.a
# 但跟踪 lib.a
!lib.a
# 忽略 build/ 目录
build/
# 忽略 doc 目录下的 .txt 文件
doc/**/*.txt
7.3 子模块管理
bash复制# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule
# 克隆包含子模块的仓库
git clone --recurse-submodules https://github.com/user/repo.git
# 更新子模块
git submodule update --init --recursive
8. 企业级 Git 工作流
8.1 Git Flow 模型
bash复制# 初始化 Git Flow
git flow init
# 开始新功能
git flow feature start myfeature
# 发布功能
git flow feature finish myfeature
# 创建发布分支
git flow release start 1.0.0
8.2 GitHub Flow 简化版
- 基于 main 创建功能分支
- 提交变更并推送到远程
3 创建 Pull Request - 代码审查后合并
- 立即部署
8.3 提交规范建议
推荐使用 Conventional Commits 规范:
code复制<type>[optional scope]: <description>
[optional body]
[optional footer]
常见类型:
- feat: 新功能
- fix: bug修复
- docs: 文档变更
- style: 代码格式
- refactor: 重构代码
- test: 测试相关
- chore: 构建/工具变更
9. 性能优化与大型仓库管理
9.1 浅克隆
bash复制# 只克隆最近历史
git clone --depth 1 https://github.com/user/repo.git
# 后续获取完整历史
git fetch --unshallow
9.2 稀疏检出
bash复制git clone --filter=blob:none --no-checkout https://github.com/user/repo.git
cd repo
git sparse-checkout init --cone
git sparse-checkout set dir1 dir2
git checkout main
9.3 清理仓库
bash复制# 清理未跟踪文件
git clean -fd
# 优化本地仓库
git gc --auto
# 重新打包对象
git repack -ad
10. 安全注意事项
10.1 敏感信息处理
bash复制# 从历史中移除敏感文件
git filter-repo --invert-paths --path sensitive-file.txt
# 强制推送到远程
git push origin --force --all
10.2 签名提交
bash复制# 配置 GPG 签名
git config --global user.signingkey <gpg-key-id>
git config --global commit.gpgsign true
# 创建签名提交
git commit -S -m "Signed commit"
10.3 审计与验证
bash复制# 验证提交签名
git log --show-signature
# 检查文件变更
git blame filename
# 检查仓库完整性
git fsck
掌握这些 Git 命令行操作后,你会发现处理版本控制问题变得游刃有余。记住,遇到问题时,git help <command> 永远是你最好的朋友。我在团队中推行命令行操作后,代码协作效率提升了至少30%,希望你也能从中受益。
