Git 全命令超级详细指南

Git 全命令超级详细指南

Git 作为当下最流行的分布式版本控制系统,包含了 150 多个命令。本文以分类场景完整示例为线索,为你系统梳理从入门到精通的所有核心 Git 操作。


第一部分:配置与仓库管理

1.1 git config ------ Git 配置管理

git config 用于管理 Git 的三层配置:系统级 (--system)、全局级 (--global) 和仓库级(不加选项)。

bash 复制代码
# 设置全局用户名和邮箱(最基础,每次提交都会用到)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 查看所有配置
git config --list

# 查看某单项配置
git config user.name

# 仓库级配置(优先级高于全局,在当前仓库目录执行)
git config user.name "Project Maintainer"
git config user.email "maintainer@project.com"

设置别名提高效率:

bash 复制代码
# 设置常用别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'

# 设置更复杂的别名
git config --global alias.graph "log --graph --oneline --all"

# 设置默认编辑器
git config --global core.editor vim

1.2 git init ------ 初始化仓库

在当前目录创建一个新的 .git 子目录,包含所有仓库元数据。

bash 复制代码
# 在当前目录初始化 Git 仓库
git init

# 指定目录初始化
git init my-project

# 初始化一个空的裸仓库(常用于远程中心仓库)
git init --bare my-project.git

1.3 git clone ------ 克隆远程仓库

将远程仓库完整复制到本地,包含所有文件和历史记录。

bash 复制代码
# 基本克隆
git clone https://github.com/user/repo.git

# 克隆到指定目录
git clone https://github.com/user/repo.git my-folder

# 克隆指定分支
git clone -b develop https://github.com/user/repo.git

# 浅克隆(只拉取最近一次提交,节省时间)
git clone --depth 1 https://github.com/user/repo.git

# 克隆所有子模块
git clone --recursive https://github.com/user/repo.git

# 通过 SSH 克隆(需要配置 SSH 密钥)
git clone git@github.com:user/repo.git

第二部分:核心快照操作(日常开发核心)

2.1 git add ------ 将改动加入暂存区

将工作区的修改添加到暂存区(Index),准备下一次提交。

bash 复制代码
# 添加单个文件
git add file.txt

# 添加当前目录下所有变更(新增、修改、删除)
git add .

# 添加整个目录
git add src/

# 只添加已跟踪文件的修改(不添加新文件)
git add -u

# 添加所有变更(相当于 `git add .` + `git add -u`)
git add -A

# 交互式添加(可选择性地暂存文件的部分修改)
git add -i

# 添加所有 `.js` 文件
git add *.js

2.2 git commit ------ 提交到本地仓库

将暂存区的内容固化为一个提交对象。

bash 复制代码
# 基本提交(会打开编辑器写提交信息)
git commit

# 提交并直接写信息(推荐)
git commit -m "fix: 修复登录页面显示问题"

# 跳过暂存区,直接提交已跟踪文件的修改
git commit -am "update: 优化性能"

# 修改最近一次提交信息(未推送时使用)
git commit --amend -m "修正提交信息"

# 向最近一次提交追加文件(不改信息)
git add forgotten.txt
git commit --amend --no-edit

2.3 git status ------ 查看工作区状态

查看工作区和暂存区的文件状态。

bash 复制代码
# 标准输出(详细)
git status

# 简洁模式(每行一个文件,用字母标识状态:A=新增,M=修改,D=删除,?=未跟踪)
git status -s

# 输出简短信息
git status -b

输出解读

  • 红色:修改在工作区,未暂存
  • 绿色:修改已暂存,等待提交
  • 无颜色/不在列表:文件已提交,与版本库一致

第三部分:分支管理

3.1 git branch ------ 分支操作

创建、列出、删除和重命名分支。

bash 复制代码
# 查看本地分支(* 表示当前分支)
git branch

# 查看所有分支(含远程)
git branch -a

# 查看远程分支
git branch -r

# 创建新分支
git branch feature-login

# 删除已合并的分支
git branch -d feature-login

# 强制删除未合并的分支
git branch -D feature-login

# 重命名分支
git branch -m old-name new-name

# 查看分支最后一次提交
git branch -v

# 查看已合并到当前分支的分支
git branch --merged

# 查看未合并的分支
git branch --no-merged

3.2 git checkout / git switch ------ 切换分支

switch 是 Git 2.23+ 推荐的新命令,语义更清晰。

bash 复制代码
# 切换到已有分支
git checkout develop
# 新版推荐:
git switch develop

# 创建并切换到新分支
git checkout -b feature-login
git switch -c feature-login

# 切换到上一个分支
git checkout -

# 用某个提交的文件覆盖工作区(注意 `--`)
git checkout -- file.txt

3.3 git merge ------ 合并分支

将指定分支的修改合并到当前分支,产生合并提交。

bash 复制代码
# 合并指定分支到当前分支
git checkout main
git merge feature-branch

# 禁用快进合并(保留分支历史)
git merge --no-ff feature-branch

# 压缩合并(将所有提交合并成一个)
git merge --squash feature-branch
git commit -m "合并 feature 分支"

# 合并后不自动提交(供检查)
git merge --no-commit feature-branch

# 放弃正在进行的合并(解决冲突前可用)
git merge --abort

3.4 git rebase ------ 变基操作

将当前分支的提交"移植"到目标分支的最新提交之后,形成线性历史。

bash 复制代码
# 基本变基(在 feature 分支执行)
git checkout feature
git rebase main

# 直接指定源和目标
git rebase main feature

# 交互式变基(合并、修改、删除历史提交)
git rebase -i HEAD~3

# 继续变基(解决冲突后)
git add .
git rebase --continue

# 跳过当前提交
git rebase --skip

# 放弃变基
git rebase --abort

第四部分:远程仓库协作

4.1 git remote ------ 管理远程仓库

管理本地仓库关联的远程源。

bash 复制代码
# 查看远程仓库列表
git remote

# 查看详细信息(含 fetch 和 push 地址)
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 查看远程仓库详细信息
git remote show origin

# 修改远程仓库地址
git remote set-url origin https://new-url.com/repo.git

# 删除远程仓库连接
git remote remove origin

# 重命名远程仓库
git remote rename origin upstream

4.2 git fetch ------ 获取远程更新(不合并)

从远程仓库下载最新数据,但不自动合并到当前分支。

bash 复制代码
# 获取所有分支更新
git fetch origin

# 获取特定分支
git fetch origin main

# 获取所有远程仓库的更新
git fetch --all

# 获取后清理已删除的远程分支引用
git fetch --prune

# 获取标签
git fetch --tags

4.3 git pull ------ 拉取并合并

git fetch + git merge 的组合命令。

bash 复制代码
# 拉取并合并远程分支到当前分支
git pull origin main

# 使用 rebase 代替 merge(推荐)
git pull --rebase origin main

# 只拉取不自动提交(合并后手动提交)
git pull --no-commit origin main

# 拉取所有远程分支的更新
git pull --all

4.4 git push ------ 推送到远程

将本地提交推送到远程仓库。

bash 复制代码
# 推送到远程同名分支
git push origin main

# 首次推送并设置上游关联
git push -u origin feature-branch

# 删除远程分支
git push origin --delete feature-branch

# 推送所有本地分支
git push --all origin

# 推送标签
git push origin v1.0

# 推送所有标签
git push --tags

# 强制推送(危险,用于改写历史)
git push --force origin main

# 更安全的强制推送(检查远程是否有他人更新)
git push --force-with-lease origin main

第五部分:撤销与回退

5.1 工作区撤销

bash 复制代码
# 丢弃工作区单个文件的修改
git restore file.txt
# 或旧版命令
git checkout -- file.txt

# 丢弃所有工作区修改
git restore .

# 删除未跟踪的文件
git clean -f
git clean -fd          # 包括目录
git clean -n           # 预览将要删除的文件

5.2 暂存区撤销

bash 复制代码
# 将文件从暂存区移回工作区
git restore --staged file.txt
# 或
git reset HEAD file.txt

# 撤销所有暂存区的修改
git reset

5.3 提交撤销(本地)

bash 复制代码
# 撤销最近一次提交,修改回到暂存区
git reset --soft HEAD~1

# 撤销最近一次提交,修改回到工作区
git reset HEAD~1

# 彻底删除最近一次提交(危险)
git reset --hard HEAD~1

# 回退到任意提交
git reset --hard a1b2c3d

# 安全撤销已推送的提交(生成反向提交)
git revert HEAD
git revert a1b2c3d

5.4 Stash 暂存(临时保存)

bash 复制代码
# 暂存当前未提交的修改
git stash
git stash push -m "临时保存"

# 查看所有暂存记录
git stash list

# 恢复最近一次暂存(保留暂存记录)
git stash apply

# 恢复并删除暂存记录
git stash pop

# 删除指定暂存
git stash drop stash@{1}

# 删除所有暂存
git stash clear

第六部分:查看与对比

6.1 git log ------ 查看提交历史

bash 复制代码
# 完整提交历史
git log

# 一行简洁展示
git log --oneline

# 图形化展示分支历史
git log --graph --all --oneline

# 查看最近 n 次提交
git log -n 5

# 查看某人提交记录
git log --author="John"

# 按提交信息搜索
git log --grep="fix"

# 查看某文件的修改历史
git log --follow file.txt

# 查看每次提交的差异(patch)
git log -p

6.2 git diff ------ 查看差异

bash 复制代码
# 工作区 vs 暂存区
git diff

# 暂存区 vs 版本库
git diff --staged
git diff --cached

# 工作区 vs 最新提交
git diff HEAD

# 比较两个分支
git diff main..feature

# 比较两个提交
git diff a1b2c3d e4f5g6h

# 查看某文件的差异
git diff file.txt

6.3 git show ------ 查看某次提交详情

bash 复制代码
# 查看最近一次提交详情
git show

# 查看指定提交详情
git show a1b2c3d

# 只查看某次提交的某文件
git show a1b2c3d:file.txt

6.4 git blame ------ 查看文件行归属

bash 复制代码
# 查看文件每行最后修改信息
git blame file.txt

# 查看指定行范围
git blame -L 10,20 file.txt

# 忽略空白改动
git blame -w file.txt

第七部分:高级操作

7.1 git cherry-pick ------ 选择性应用提交

将其他分支的某个提交应用到当前分支。

bash 复制代码
# 应用单个提交
git cherry-pick a1b2c3d

# 应用多个提交
git cherry-pick a1b2c3d e4f5g6h

# 应用区间提交(不包括起始)
git cherry-pick start..end

# 不自动提交(供检查)
git cherry-pick -n a1b2c3d

# 继续(解决冲突后)
git cherry-pick --continue

# 放弃
git cherry-pick --abort

7.2 git bisect ------ 二分查找定位 bug

bash 复制代码
# 开始二分查找
git bisect start

# 标记当前版本为坏版本
git bisect bad

# 标记已知的好版本
git bisect good v1.0

# Git 会切到一个中间提交,测试后标记好或坏
git bisect good   # 如果这个版本正常
git bisect bad    # 如果这个版本有问题

# 找到 bug 提交后,结束 bisect
git bisect reset

7.3 git reflog ------ 引用日志(救急神器)

找回所有因 resetrebase 等操作丢失的提交。

bash 复制代码
# 查看所有 HEAD 变更记录
git reflog

# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~2
# e4f5g6h HEAD@{1}: commit: 不小心提交的错误代码

# 找回丢失的提交
git checkout e4f5g6h
# 或创建分支指向它
git branch recovered e4f5g6h

7.4 git grep ------ 在版本库中搜索

bash 复制代码
# 搜索包含某字符串的文件
git grep "TODO"

# 搜索并显示行号
git grep -n "function_name"

# 指定分支搜索
git grep "console.log" main

# 统计匹配数量
git grep -c "error"

7.5 git submodule ------ 子模块管理

bash 复制代码
# 添加子模块
git submodule add https://github.com/user/lib.git lib/

# 初始化子模块
git submodule init

# 更新所有子模块
git submodule update

# 更新并递归
git submodule update --init --recursive

# 查看子模块状态
git submodule status

第八部分:标签管理

标签用于标记重要的版本节点。

bash 复制代码
# 查看所有标签
git tag

# 创建轻量标签
git tag v1.0

# 创建附注标签(推荐)
git tag -a v1.0 -m "正式版 v1.0"

# 为历史提交打标签
git tag -a v0.9 a1b2c3d -m "候选版本"

# 删除本地标签
git tag -d v1.0

# 推送单个标签到远程
git push origin v1.0

# 推送所有标签
git push --tags

# 删除远程标签
git push origin --delete v1.0

第九部分:其他实用命令

9.1 git help ------ 获取帮助

bash 复制代码
# 列出常用命令
git help

# 查看某命令详细帮助
git help add

# 打开完整手册
git help --all

9.2 git archive ------ 导出代码快照

bash 复制代码
# 导出当前 HEAD 的代码为 ZIP
git archive --format=zip HEAD > code.zip

# 导出指定标签的代码为 tar.gz
git archive --format=tar.gz --output=code.tar.gz v1.0

# 只导出指定目录
git archive HEAD:src/ --format=zip > src.zip

9.3 git shortlog ------ 汇总提交信息

bash 复制代码
# 按作者汇总提交
git shortlog

# 按作者分组,简洁显示
git shortlog -sn

# 指定版本区间
git shortlog v1.0..v2.0

第十部分:完整工作流示例

10.1 新项目初始化和首次提交

bash 复制代码
# 1. 创建项目目录并进入
mkdir my-project && cd my-project

# 2. 初始化 Git 仓库
git init

# 3. 配置仓库级用户信息(可选)
git config user.name "Your Name"
git config user.email "your.email@example.com"

# 4. 创建 README 文件
echo "# My Project" > README.md

# 5. 添加文件到暂存区
git add README.md

# 6. 首次提交
git commit -m "Initial commit"

# 7. 添加远程仓库
git remote add origin https://github.com/user/my-project.git

# 8. 推送到远程
git push -u origin main

10.2 日常开发工作流

bash 复制代码
# 1. 拉取最新代码
git pull --rebase origin main

# 2. 创建功能分支
git checkout -b feature/new-feature

# 3. 开发并提交
git add .
git commit -m "feat: 添加新功能"

# 4. 继续开发,再次提交
git add .
git commit -m "fix: 修复 bug"

# 5. 合并主分支最新代码
git fetch origin
git rebase origin/main

# 6. 合并回主分支
git checkout main
git merge --no-ff feature/new-feature

# 7. 推送
git push origin main

# 8. 删除本地功能分支
git branch -d feature/new-feature

10.3 紧急修复流程

bash 复制代码
# 1. 从主分支创建修复分支
git checkout -b hotfix/critical-bug main

# 2. 修复并提交
git add .
git commit -m "fix: 紧急修复严重 bug"

# 3. 合并回主分支
git checkout main
git merge --no-ff hotfix/critical-bug

# 4. 打标签
git tag -a v1.0.1 -m "紧急修复版本"

# 5. 推送代码和标签
git push origin main
git push origin v1.0.1

# 6. 删除修复分支
git branch -d hotfix/critical-bug

10.4 误操作恢复流程

bash 复制代码
# 场景1:误删文件但未提交
git restore deleted-file.txt

# 场景2:误提交到错误分支
git reset HEAD~1
git stash
git checkout correct-branch
git stash pop
git add .
git commit -m "正确的提交"

# 场景3:误 reset --hard 丢了提交
git reflog
# 找到丢失的 commit hash
git reset --hard <lost-commit-hash>

# 场景4:误推送了错误代码
git revert HEAD
git push origin main

第十一部分:命令速查表

分类 命令 功能
配置 git config --global user.name "Name" 设置用户名
git config --global user.email "email" 设置邮箱
git config --list 查看所有配置
初始化 git init 初始化仓库
git clone <url> 克隆远程仓库
日常操作 git status 查看状态
git add <file> 添加到暂存区
git commit -m "msg" 提交到本地
git diff 查看差异
git log --oneline 查看历史
分支 git branch 查看分支
git checkout -b <name> 创建并切换分支
git merge <branch> 合并分支
git branch -d <name> 删除分支
远程 git remote -v 查看远程仓库
git push origin <branch> 推送到远程
git pull origin <branch> 拉取并合并
git fetch origin 获取但不合并
撤销 git restore <file> 丢弃工作区修改
git reset HEAD <file> 撤出暂存区
git reset --soft HEAD~1 撤销提交(保留修改)
git reset --hard HEAD~1 彻底删除提交
git revert <commit> 安全撤销公共提交
git stash 暂存当前修改
高级 git rebase -i HEAD~n 交互式变基
git cherry-pick <commit> 选择性应用提交
git bisect start 二分查找 bug
git reflog 查看引用日志
标签 git tag -a v1.0 -m "msg" 创建附注标签
git push --tags 推送所有标签
清理 git clean -fd 删除未跟踪文件
git gc 垃圾回收优化

总结

Git 提供了超过 150 个命令,但实际日常开发中常用的约 20-30 个。掌握本文的核心命令,足以应对 95% 的开发场景。关键在于理解 Git 的四大区域模型 (工作区 → 暂存区 → 本地仓库 → 远程仓库),当需要执行某个操作时,只需判断它是作用于哪个区域、想要达到什么效果,就能自然找到对应的命令。建议多在本地练习、善用 git statusgit diff 观察状态,遇到问题时第一反应查看 git reflog

相关推荐
末代程序员_C2 小时前
Maven版本管控:多分支并行开发中的API版本管理之道
大数据·elasticsearch·maven
Omics Pro2 小时前
癌症亚型分类新型多组学整合框架
大数据·人工智能·python·算法·机器学习·分类·数据挖掘
dingzd952 小时前
视频创作工具持续升级跨境社媒内容生产流程如何做轻量化
大数据·人工智能·新媒体运营·市场营销·跨境
陈陈CHENCHEN2 小时前
【ES & Kibana】Kibana 启动 statusCode: 429 报错
elasticsearch
Elivs.Xiang2 小时前
基于docker安装MySQL、RabbitMQ、ElasticSearch、minio
linux·mysql·elasticsearch·docker·rabbitmq
GlobalInfo2 小时前
2026年喷涂机器人行业市场调查与投资建议分析
大数据·人工智能·机器人
Jason_zhao_MR2 小时前
基于米尔RK3576核心板的国产割草机器人解决方案
大数据·linux·人工智能·单片机·物联网·机器人·嵌入式
蓉蓉的数码视界2 小时前
则成电子26年一季报:AI+汽车电子双轮驱动成效显著,营收增长26.68%
大数据·人工智能·汽车
juniperhan2 小时前
Flink 系列第16篇:Flink 核心数据类型类详解(POJO、Row、Tuple)
java·大数据·数据仓库·分布式·flink