一篇面向开发者的 Git 全面指南,从基础概念到高级技巧,助你高效管理代码版本。
目录
Git 简介
核心概念
安装与配置
基础操作
分支管理
远程仓库协作
版本回退与修复
Git 高级技巧
.gitignore 配置
常见问题与解决方案
最佳实践
Git 简介
Git 是一个分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,最初是为了管理 Linux 内核的源代码。与传统的集中式版本控制系统(如 SVN)不同,Git 每个开发者本地都有一份完整的仓库副本,这使得它在以下方面具有显著优势:
离线工作能力:无需网络即可完成提交、查看历史等操作
强大的分支管理:分支的创建、切换和合并非常轻量
高性能:几乎所有操作都在本地完成,速度极快
数据完整性:使用 SHA-1 哈希算法确保数据不被篡改
灵活的工作流:支持多种协作模式(Feature Branch、Git Flow、Trunk-Based 等)
核心概念
工作区、暂存区与仓库
理解 Git 的三个核心区域是掌握 Git 的基础:
工作区 (Working Directory) → 暂存区 (Staging Area) → 本地仓库 (Repository) git add ──────────────→ git commit ────────────→| 工作区 | |
| 暂存区(Index) | |
| 本地仓库 |
文件的四种状态
Untracked → Modified → Staged → Committed (未跟踪) (已修改) (已暂存) (已提交)Untracked:文件存在但未被 Git 跟踪
Modified:文件已被修改但尚未暂存
Staged:文件已暂存,将在下次
git commit时提交Committed:文件已安全存储到本地仓库
Commit(提交)
每次提交都是项目的一个快照,包含:
提交对象的 SHA-1 哈希值(如
a1b2c3d4...)作者信息
提交时间
提交消息
指向父提交的指针
HEAD 指针
HEAD 是一个特殊指针,指向当前所在的分支(或提交)。它是理解 git checkout、git switch 等操作的关键。
安装与配置
安装
Windows:
# 从官网下载安装包 # https://git-scm.com/download/win # 或使用包管理器 winget install Git.GitmacOS:
brew install gitLinux(Debian/Ubuntu):
sudo apt-get install git基本配置
# 设置用户名和邮箱(每次提交都会使用这些信息) git config --global user.name "你的名字" git config --global user.email "your@email.com" # 设置默认编辑器 git config --global core.editor "code --wait" # VS Code git config --global core.editor "vim" # Vim # 设置默认分支名称 git config --global init.defaultBranch main # 设置换行符处理(推荐) git config --global core.autocrlf true # Windows git config --global core.autocrlf input # macOS/Linux # 查看配置 git config --list git config --global --list配置 SSH 密钥(推荐)
# 生成 SSH 密钥 ssh-keygen -t ed25519 -C "your@email.com" # 启动 SSH agent eval "? -ne 0 ]; then echo "代码检查未通过,提交已取消" exit 1 fi # commit-msg 钩子(验证提交消息格式) # .git/hooks/commit-msg #!/bin/sh commit_msg=$(cat "$1") if ! echo "py.class .venv/ venv/ # Java *.class *.jar *.war target/修复已跟踪的文件
# 如果文件已经被跟踪,添加到 .gitignore 后需要执行: git rm --cached file.txt # 从跟踪中移除单个文件 git rm -r --cached directory/ # 从跟踪中移除整个目录常见问题与解决方案
1. 合并冲突
# 当出现冲突时,文件内容会包含冲突标记: # <<<<<<< HEAD # 你的代码 # ======= # 其他人的代码 # >>>>>>> feature/other-branch # 解决步骤: # 1. 手动编辑冲突文件,选择保留的代码 # 2. 删除冲突标记(<<<<<<< , ======= , >>>>>>>) # 3. 暂存解决后的文件 git add conflicted-file.txt # 4. 完成合并 git commit2. 误操作恢复
# 误删了文件 git checkout -- deleted-file.txt # 误执行了 git reset --hard git reflog # 查看操作历史 git reset --hard HEAD@{1} # 恢复到上一步 # 误删除了分支 git reflog # 找到分支最后的提交 git branch recovered-branch hash # 重新创建分支3. 修改已推送的提交消息
# 修改最近一次提交 git commit --amend -m "新的消息" git push --force-with-lease # 安全地强制推送 # ⚠️ 不要使用 git push --force,除非你确定没有其他人在使用该分支4. 将多个提交合并为一个
# 交互式变基 git rebase -i HEAD~3 # 在编辑器中将 pick 改为 squash(合并到前一个提交) # pick abc1234 第一个提交 # squash def5678 第二个提交 # squash ghi9012 第三个提交5. 分支关联远程
# 设置本地分支跟踪远程分支 git branch --set-upstream-to=origin/main main # 查看跟踪关系 git branch -vv最佳实践
提交消息规范
推荐使用 Conventional Commits 规范:
<type>(<scope>): <subject> <body> <footer>类型(type):
feat | |
fix | |
docs | |
style | |
refactor | |
perf | |
test | |
chore | |
ci |
示例:
feat(auth): 添加用户登录功能 - 实现 JWT token 认证 - 添加登录表单验证 - 集成 OAuth2.0 第三方登录 Closes #123分支策略
Git Flow(适合版本发布项目):
main ─────────────────────────────── 生产环境代码 └── develop ────────────────────── 开发主分支 └── feature/login ────────── 功能分支 └── feature/payment ──────── 功能分支 └── release/1.0 ───────────────── 发布分支 └── hotfix/bug-123 ────────────── 热修复分支Trunk-Based Development(适合持续部署项目):
main ─────────────────────────────── 始终可部署 └── feature/login (短生命周期) ── 快速合并 └── feature/payment (短生命周期) ─ 快速合并日常工作建议
频繁提交,小步前进:每个提交只做一件事,方便回退和审查
写有意义的提交消息:未来的你会感谢现在的你
在功能分支上工作:永远不要直接在 main 分支上开发
推送前先拉取:避免不必要的合并冲突
善用
git add -p:分批暂存,让每个提交都专注单一变更配置
.gitignore:避免提交不必要的文件使用 SSH 密钥认证:比密码更安全,也更方便
定期清理远程分支:删除已合并的远程分支保持仓库整洁
实用命令速查表
# === 设置 === git init # 初始化仓库 git clone <url> # 克隆仓库 git config --global user.name "Name" # 设置用户名 git config --global user.email "E" # 设置邮箱 # === 基本操作 === git status # 查看状态 git add . # 暂存所有更改 git commit -m "msg" # 提交 git log --oneline --graph --all # 图形化历史 # === 分支 === git branch # 列出分支 git switch -c <branch> # 创建并切换 git merge <branch> # 合并分支 git branch -d <branch> # 删除分支 # === 远程 === git remote -v # 查看远程 git fetch # 获取更新 git pull # 拉取并合并 git push # 推送 # === 撤销 === git restore <file> # 撤销工作区修改 git restore --staged <file> # 取消暂存 git revert <commit> # 安全回退 git reset --hard <commit> # 强制回退 # === 暂存 === git stash # 保存工作区 git stash pop # 恢复并删除暂存 git stash list # 查看暂存列表结语
Git 不仅仅是一个版本控制工具,它是现代软件开发工作流的基石。掌握 Git 的核心概念和常用命令,能够极大地提升你的开发效率和团队协作能力。
夜雨聆风