Git 系统性使用指南
Git 是分布式版本控制系统,用于高效管理项目代码。本文从基础到高级,全方位总结 Git 核心概念、命令与最佳实践。
《Git 命令速查表》
核心说明
此表格为Git全场景常用命令速查,覆盖基础配置、日常操作、分支管理、远程协作、撤销回退、高级操作全维度,适配Git新版规范,兼顾旧版兼容命令,可直接用于日常开发、面试复习、团队规范参考。
| 分类 | 核心命令 | 功能说明 | 常用示例代码 |
|---|---|---|---|
| 基础配置与仓库初始化 | git config |
配置Git全局/局部用户信息、编辑器、别名等核心参数 | git config --global user.name "你的名称" git config --global user.email "你的邮箱" git config --list(查看所有配置) |
git init |
初始化一个全新的本地Git仓库 | git init 项目名称(新建文件夹并初始化) git init(当前目录直接初始化) |
|
git clone |
克隆远程仓库到本地,自动关联远程源 | git clone https://github.com/用户名/仓库名.git git clone -b 分支名 仓库地址(克隆指定分支) |
|
| 日常核心操作 | git status |
查看工作区、暂存区的文件状态(新增/修改/删除/未跟踪) | git status git status -s(精简一行输出) |
git add |
将工作区的修改/新增文件添加到暂存区 | git add 文件名(添加单个文件) git add .(添加当前目录所有变更) git add 目录名/(添加指定目录) |
|
git commit |
将暂存区的内容提交到本地版本库,生成永久提交记录 | git commit -m "提交说明" git commit -am "提交说明"(跳过add,直接提交已跟踪文件) git commit --amend(修改最近一次提交信息) |
|
git diff |
查看不同区域间的代码差异 | git diff(工作区 vs 暂存区) git diff --staged(暂存区 vs 版本库,同--cached) git diff HEAD(工作区 vs 最新版本) |
|
git log |
查看分支提交历史记录 | git log git log --oneline(一行精简展示) git log --graph --all --oneline(图形化展示全部分支历史) |
|
| 分支管理 | git branch |
分支的创建、查看、删除、重命名 | git branch(查看本地分支) git branch -a(查看本地+远程全部分支) git branch 新分支名(创建分支) git branch -d 分支名(删除已合并分支) git branch -D 分支名(强制删除未合并分支) |
git checkout / git switch |
切换分支,或创建并切换分支(switch为Git 2.23+新版推荐命令) | git checkout 分支名 / git switch 分支名(切换分支) git checkout -b 新分支名 / git switch -c 新分支名(创建并切换分支) |
|
git merge |
将目标分支的提交合并到当前分支 | git merge 待合并分支名 git merge --no-ff 待合并分支名(禁用快进合并,保留合并记录) |
|
| 远程仓库协作 | git remote |
管理本地仓库关联的远程仓库源 | git remote -v(查看已关联的远程源) git remote add origin 远程仓库地址(添加远程源,origin为默认别名) git remote set-url origin 新地址(修改远程源地址) |
git push |
将本地分支的提交推送到远程仓库 | git push origin 分支名 git push -u origin 分支名(首次推送并关联远程分支,后续可直接git push) git push origin --delete 远程分支名(删除远程分支) |
|
git pull |
拉取远程分支的最新提交,并合并到当前本地分支(fetch + merge) | git pull origin 分支名 git pull --rebase origin 分支名(拉取后用变基替代合并,保持提交线整洁) |
|
git fetch |
抓取远程仓库的所有更新,但不自动合并到本地分支 | git fetch origin git fetch --all(抓取所有远程源的更新) |
|
| 撤销与回退操作 | git restore |
撤销工作区/暂存区的修改(Git 2.23+ 新版推荐命令) | git restore 文件名(撤销工作区修改,恢复到暂存区状态) git restore --staged 文件名(撤销暂存区的add操作,保留工作区修改) |
git reset |
回退提交记录,可控制修改的保留范围,分为3种核心模式 | git reset --soft HEAD~1(仅撤销提交,修改保留在暂存区) git reset --mixed HEAD~1(默认模式,撤销提交+暂存区,修改保留在工作区) git reset --hard HEAD~1(彻底回退,丢弃所有修改,高危慎用!) |
|
git revert |
反转指定提交,生成新的提交记录,不修改历史,安全用于公共分支 | git revert HEAD(反转最近一次提交) git revert 提交哈希值(反转指定历史提交) |
|
git reflog |
查看本地仓库所有HEAD操作记录,用于找回误删/误回退的提交 | git reflog git reset --hard HEAD@{序号}(恢复到指定操作节点) |
|
git stash |
临时暂存工作区未完成的修改,用于切换分支前保存现场 | git stash push -m "暂存说明" git stash list(查看所有暂存记录) git stash apply stash@{0}(应用指定暂存,不删除) git stash pop(应用最近一次暂存并删除) git stash drop stash@{0}(删除指定暂存) |
|
| 标签管理 | git tag |
版本标签创建、查看、删除,用于版本发布标记 | git tag 标签名(创建轻量标签) git tag -a 标签名 -m "标签说明"(创建附注标签,推荐用于版本发布) git tag(查看所有标签) git show 标签名(查看标签详情) git tag -d 标签名(删除本地标签) |
git push 标签相关 |
标签的远程推送与删除 | git push origin 标签名(推送单个标签到远程) git push origin --tags(推送所有本地标签到远程) git push origin --delete 标签名(删除远程标签) |
|
| 高级进阶操作 | git cherry-pick |
选择性将指定分支的单个/多个提交,合并到当前分支 | git cherry-pick 提交哈希值 git cherry-pick 提交哈希1 提交哈希2(合并多个提交) |
git rebase |
变基操作,将当前分支的提交移到目标分支的最新提交之上,保持提交历史线性整洁 | git rebase 目标分支名 git rebase -i HEAD~n(交互式变基,可合并/修改/删除历史提交) |
|
git bisect |
二分法查找引入Bug的提交,快速定位问题 | git bisect start(启动查找) git bisect bad(标记当前提交有Bug) git bisect good 正常版本号/提交哈希(标记已知正常的版本) git bisect reset(查找完成后退出) |
|
git blame |
逐行查看文件的修改历史,包括修改人、提交时间、提交哈希 | git blame 文件名 |
|
git submodule |
子模块管理,在主仓库中嵌套管理其他Git仓库 | git submodule add 子模块仓库地址 存放路径(添加子模块) git clone --recursive 主仓库地址(克隆含子模块的仓库) git submodule update --init --recursive(更新并初始化所有子模块) |
补充使用规范
- 命令中
HEAD~1代表最近1次提交,可替换为HEAD~n代表最近n次提交,也可直接替换为指定的提交哈希值 - 所有带
--global的配置为全局生效,不加则仅对当前仓库生效 git rebase禁止在多人协作的公共分支上使用,仅可用于个人本地分支git reset --hard为高危操作,执行前请确认已备份重要修改- 提交信息推荐遵循 Conventional Commits 规范,格式为
type: 描述(如fix: 修复登录接口超时、feat: 新增用户管理模块)
一、Git 基础
1. 安装与配置
# 安装(以 Ubuntu 为例)
sudo apt install git
# 配置用户信息(全局)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 查看配置
git config --list
2. 初始化仓库
# 新建仓库
git init my-project
cd my-project
# 或克隆现有仓库
git clone https://github.com/username/repository.git
3. 核心概念:工作区、暂存区、版本库
- 工作区:本地文件目录
- 暂存区:临时保存待提交的修改(
git add后) - 版本库:Git 仓库的核心(
.git目录)
4. 基础操作
(1)查看状态
git status
(2)添加文件到暂存区
# 添加单个文件
git add file.txt
# 添加所有文件
git add .
# 添加指定目录
git add src/
(3)提交到版本库
# 提交暂存区文件
git commit -m "提交说明"
# 跳过暂存区,直接提交工作区已跟踪的文件
git commit -am "提交说明"
(4)查看差异
# 工作区 vs 暂存区
git diff
# 暂存区 vs 版本库
git diff --staged # 或 git diff --cached
# 工作区 vs 版本库
git diff HEAD
(5)查看提交日志
# 查看完整日志
git log
# 简洁日志(一行显示)
git log --oneline
# 图形化显示分支历史
git log --graph --all --oneline
二、分支管理
1. 分支基础操作
(1)创建分支
git branch dev # 创建名为 dev 的分支
(2)切换分支
git checkout dev # 切换到 dev 分支
# 或使用新版命令
git switch dev
(3)创建并切换分支
git checkout -b dev # 创建 dev 并切换
# 或
git switch -c dev
(4)查看分支
git branch # 查看本地分支
git branch -a # 查看所有分支(本地+远程)
2. 合并分支
(1)普通合并
# 切换到目标分支(如 master)
git checkout master
# 合并 dev 分支到 master
git merge dev
(2)解决合并冲突
当合并冲突时,Git 会标记冲突文件。手动编辑文件后:
git add conflict-file.txt # 标记冲突已解决
git commit -m "解决合并冲突"
3. 删除分支
# 删除已合并的分支
git branch -d dev
# 强制删除未合并的分支
git branch -D dev
三、远程仓库操作
1. 关联远程仓库
# 查看远程仓库
git remote -v
# 添加远程仓库(origin 为默认名称)
git remote add origin https://github.com/username/repo.git
# 修改远程仓库 URL
git remote set-url origin https://github.com/username/new-repo.git
2. 推送与拉取
(1)推送本地分支到远程
git push origin master # 推送 master 分支
git push -u origin master # 首次推送并关联(后续可直接 git push)
(2)拉取远程更新
# 抓取远程更新但不合并
git fetch origin
# 拉取并合并(fetch + merge)
git pull origin master
3. 远程分支管理
# 查看远程分支
git branch -r
# 删除远程分支
git push origin --delete dev
四、撤销与回退
1. 撤销工作区修改
git checkout -- file.txt # 丢弃工作区修改(恢复到暂存区状态)
# 或新版命令
git restore file.txt
2. 撤销暂存区修改
git reset HEAD file.txt # 从暂存区移除(保留工作区修改)
# 或新版命令
git restore --staged file.txt
3. 撤销提交(git reset)
git reset 有三种模式,通过 --soft/--mixed/--hard 区分:
| 模式 | 作用 |
|---|---|
--soft |
仅撤销提交,修改保留在暂存区 |
--mixed |
默认模式,撤销提交和暂存区,修改保留在工作区 |
--hard |
彻底撤销,丢弃所有修改(慎用!) |
# 示例:撤销最近 1 次提交
git reset --soft HEAD~1 # 保留修改在暂存区
git reset --mixed HEAD~1 # 保留修改在工作区(默认)
git reset --hard HEAD~1 # 彻底丢弃修改
4. 反转提交(git revert)
创建新提交来撤销历史提交(不修改历史,适合公共分支):
git revert HEAD # 撤销最近一次提交
git revert commit-hash # 撤销指定提交
5. 查看操作历史(git reflog)
记录所有 HEAD 移动(可用于恢复误删的提交):
git reflog # 查看操作历史
git reset --hard HEAD@{
n} # 恢复到指定操作
五、标签管理
1. 创建标签
# 轻量标签(仅指向提交)
git tag v1.0
# 附注标签(包含标签信息)
git tag -a v1.0 -m "版本 1.0 发布"
2. 查看标签
git tag # 查看所有标签
git show v1.0 # 查看标签详情
3. 推送标签到远程
git push origin v1.0 # 推送单个标签
git push origin --tags # 推送所有标签
4. 删除标签
# 删除本地标签
git tag -d v1.0
# 删除远程标签
git push origin --delete v1.0
六、高级操作
1. 暂存工作区(git stash)
临时保存未完成的修改(用于切换分支前):
# 暂存工作区
git stash save "临时保存的修改"
# 查看暂存列表
git stash list
# 应用暂存(不删除)
git stash apply stash@{
0}
# 应用并删除暂存
git stash pop
# 删除暂存
git stash drop stash@{
0}
2. 选择性合并提交(git cherry-pick)
将某个分支的特定提交合并到当前分支:
git cherry-pick commit-hash
3. 变基(git rebase)
将当前分支的提交“移动”到目标分支的最新提交之上(使历史更清晰):
# 在 dev 分支上,将 dev 的提交基于 master 最新
git checkout dev
git rebase master
⚠️ 注意:不要对公共分支使用 rebase(会修改历史)!
4. 二分查找 Bug(git bisect)
通过二分法快速定位引入 Bug 的提交:
git bisect start # 开始查找
git bisect bad # 标记当前提交为有 Bug
git bisect good v1.0 # 标记 v1.0 为正常
# Git 自动切换到中间提交,测试后标记 good/bad,直到找到 Bug 提交
git bisect reset # 退出查找
5. 查看文件修改历史(git blame)
逐行查看文件的修改者和时间:
git blame file.txt
6. 子模块(git submodule)
在一个 Git 仓库中嵌套另一个仓库:
# 添加子模块
git submodule add https://github.com/username/submodule.git path/to/submodule
# 克隆包含子模块的仓库
git clone --recursive https://github.com/username/repo.git
# 更新子模块
git submodule update --init --recursive
7. Git 别名配置
简化常用命令:
git config --global alias.co checkout # git co = git checkout
git config --global alias.br branch # git br = git branch
git config --global alias.ci commit # git ci = git commit
git config --global alias.st status # git st = git status
七、最佳实践
- 提交粒度:每次提交聚焦一个功能/修复,避免大而全的提交。
- 提交说明:使用清晰的描述(如
fix: 修复登录接口超时)。 - 分支策略:采用 Git Flow 或 GitHub Flow 等分支管理模型。
- 避免强制推送:除非是个人分支,否则不要使用
git push --force。
八、更多资源
- Git 官方文档:https://git-scm.com/doc
- Pro Git(在线书籍):https://git-scm.com/book/zh/v2