乐于分享
好东西不私藏

Git 详细使用说明

Git 详细使用说明

一篇面向开发者的 Git 全面指南,从基础概念到高级技巧,助你高效管理代码版本。


目录

  1. Git 简介

  2. 核心概念

  3. 安装与配置

  4. 基础操作

  5. 分支管理

  6. 远程仓库协作

  7. 版本回退与修复

  8. Git 高级技巧

  9. .gitignore 配置

  10. 常见问题与解决方案

  11. 最佳实践


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)
一个准备提交的快照区域,记录下一次提交的文件状态
本地仓库
Git 数据库,存储所有提交历史和版本信息

文件的四种状态

Untracked  →  Modified  →  Staged  →  Committed  (未跟踪)     (已修改)     (已暂存)    (已提交)
  • Untracked:文件存在但未被 Git 跟踪

  • Modified:文件已被修改但尚未暂存

  • Staged:文件已暂存,将在下次 git commit 时提交

  • Committed:文件已安全存储到本地仓库

Commit(提交)

每次提交都是项目的一个快照,包含:

  • 提交对象的 SHA-1 哈希值(如 a1b2c3d4...

  • 作者信息

  • 提交时间

  • 提交消息

  • 指向父提交的指针

HEAD 指针

HEAD 是一个特殊指针,指向当前所在的分支(或提交)。它是理解 git checkoutgit switch 等操作的关键。


安装与配置

安装

Windows:

# 从官网下载安装包 # https://git-scm.com/download/win # 或使用包管理器 winget install Git.Git

macOS:

brew install git

Linux(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 commit

2. 误操作恢复

# 误删了文件 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
修复 Bug
docs
文档更新
style
代码格式(不影响功能)
refactor
重构
perf
性能优化
test
测试相关
chore
构建过程或辅助工具变动
ci
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 (短生命周期) ─ 快速合并

日常工作建议

  1. 频繁提交,小步前进:每个提交只做一件事,方便回退和审查

  2. 写有意义的提交消息:未来的你会感谢现在的你

  3. 在功能分支上工作:永远不要直接在 main 分支上开发

  4. 推送前先拉取:避免不必要的合并冲突

  5. 善用 git add -p:分批暂存,让每个提交都专注单一变更

  6. 配置 .gitignore:避免提交不必要的文件

  7. 使用 SSH 密钥认证:比密码更安全,也更方便

  8. 定期清理远程分支:删除已合并的远程分支保持仓库整洁


实用命令速查表

# === 设置 === 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 的核心概念和常用命令,能够极大地提升你的开发效率和团队协作能力。