Git指令大全:2025年版本控制完整教学指南 | 前端开发必学
 
 快速解答
2025年必学Git指令包括:git switch切换分支、git restore恢复文件、git stash暂存变更、git pull拉取更新、git push推送变更、git merge合并分支等。新版本推荐使用switch取代checkout,restore取代checkout恢复文件。
Git 基础设定
初次设定
# 设定用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 初始化仓库
git init
# 查看设定
git config --list实用设定
# 设定默认编辑器
git config --global core.editor "code --wait"
# 设定别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit文件管理
基本操作
# 查看状态
git status
git status -s          # 简洁显示
# 添加文件
git add filename.txt
git add .              # 添加所有文件
git add *.js           # 添加所有 JS 文件
# 移除暂存
git reset filename.txt
git reset              # 移除所有暂存文件操作
# 重新命名
git mv oldname.txt newname.txt
# 删除文件
git rm filename.txt
git rm --cached filename.txt    # 只从 Git 移除
# 查看差异
git diff                        # 工作区与暂存区
git diff --staged              # 暂存区与提交提交管理
提交操作
# 提交
git commit -m "提交信息"
git commit -am "快速提交"       # add + commit
# 修改最后提交
git commit --amend -m "新信息"
git commit --amend --no-edit    # 不修改信息
# 查看历史
git log
git log --oneline              # 一行显示
git log --graph                # 图形化
git log --stat                 # 显示统计恢复操作
# 恢复文件
git restore filename.txt       # 推荐使用
git checkout filename.txt       # 旧版本
# 恢复提交
git reset --soft HEAD~1        # 保留在暂存区
git reset --mixed HEAD~1       # 保留在工作区
git reset --hard HEAD~1        # 完全删除
# 反转提交
git revert commit-hash分支操作
分支管理
# 查看分支
git branch
git branch -a                  # 包含远端分支
git branch -r                  # 只看远端分支
# 建立分支
git branch branch-name
git switch -c branch-name      # 推荐使用
git checkout -b branch-name    # 旧版本
# 切换分支
git switch branch-name         # 推荐使用(Git 2.23+)
git checkout branch-name       # 旧版本但仍广泛使用
# 删除分支
git branch -d branch-name      # 安全删除
git branch -D branch-name      # 强制删除合并操作
# 合并分支
git merge branch-name
git merge --no-ff branch-name  # 保留合并记录
# 重新整理
git rebase branch-name
git rebase -i HEAD~3           # 交互式重整
# 取消操作
git merge --abort
git rebase --abort远端操作
远端管理
# 添加远端
git remote add origin https://github.com/user/repo.git
# 查看远端
git remote -v
git remote show origin
# 推送
git push origin main
git push -u origin main        # 设定上游跟踪
git push --all                 # 推送所有分支
# 拉取
git pull
git pull origin main
git fetch                      # 只下载不合并
git fetch --all                # 拉取所有远端协作操作
# 复制仓库
git clone https://github.com/user/repo.git
git clone --depth 1 url        # 浅复制
# 同步更新 - 重要:选择正确的策略
git pull                       # 默认:fetch + merge(创建合并提交)
git pull --rebase              # fetch + rebase(线性历史)
git fetch upstream
git merge upstream/main
# 修剪远端分支
git remote prune origin
git fetch --prunegit pull vs git pull —rebase
git pull(默认行为):
- 在历史中创建合并提交
- 对于共享/已发布分支较安全
- 保留确切的协作时间线
- 可能创建「混乱」的非线性历史
git pull —rebase:
- 创建干净的线性历史
- 危险:绝对不要用于已发布的提交
- 适合个人功能分支
- 可能导致需要手动解决的冲突
最佳实践: 只在未发布的本地分支使用 git pull --rebase。
git pull —rebase 安全使用指南
安全使用条件(同时满足):
- 功能分支:不是 main 或 develop 等公共分支
- 本地提交:你的提交尚未被其他人拉取或依赖
- 个人工作:没有其他开发者在此分支上协作
危险使用情境(绝对禁止):
- 在 main、develop 等公共分支上使用
- 提交已被团队成员拉取或合并
- 多人协作的功能分支
- 已经推送并被 CI/CD 或其他系统依赖的提交
关键 Rebase 安全规则
git pull —rebase 的安全场景:
# 个人功能分支,从未推送
git checkout -b feature/my-work
# 只在本地工作
git pull --rebase origin main
# 功能分支已推送但没有其他人依赖
git push -u origin feature/my-work
# 如果没有协作者仍可安全 rebase
git pull --rebase origin main危险场景(绝对不要 rebase):
# 主分支/共享分支
git checkout main
git pull --rebase  # 绝对不要这样做
# 已被队友拉取的提交
git checkout feature/shared-work
git pull --rebase  # 会破坏队友的历史
# 已在 PR/MR 中的提交
# 一旦提交进入 Pull Request,就不要 rebase真实后果: 如果您 rebase 已发布的提交,队友会看到:
- Git 历史冲突
- “您的分支与 origin/main 已分歧” 错误
- 需要强制推送自己的工作(也会破坏其他人)
队友在共享分支被错误 rebase 后的恢复:
# 如果主分支被错误 rebase
git fetch origin
git reset --hard origin/main
# 可能会失去本地工作 - 务必先备份!暂存管理
Stash 操作
# 暂存变更
git stash
git stash push -m "暂存信息"
git stash -u                   # 包含未跟踪文件
# 管理暂存
git stash list
git stash show stash@{0}
# 恢复暂存
git stash pop                  # 恢复并删除
git stash apply stash@{0}      # 只恢复不删除
# 清理暂存
git stash drop stash@{0}
git stash clear                # 清除所有标签管理
标签操作
# 建立标签
git tag v1.0.0
git tag -a v1.0.0 -m "版本 1.0.0"
# 查看标签
git tag
git tag -l "v1.*"
git show v1.0.0
# 推送标签
git push origin v1.0.0
git push --tags
# 删除标签
git tag -d v1.0.0
git push origin :refs/tags/v1.0.0专业标签与发布管理
专业标签策略
语义化版本控制(推荐):
# 版本格式:主版本.次版本.修补版本
git tag v1.0.0          # 初始发布
git tag v1.0.1          # 错误修复
git tag v1.1.0          # 新功能
git tag v2.0.0          # 破坏性变更
# 带发布说明的注解标签
git tag -a v1.2.0 -m "发布 v1.2.0
功能:
- 新增用户验证
- 性能提升 30%
错误修复:
- 修复数据处理内存泄漏
- 解决 CSS 布局问题"与 CI/CD 整合:
# 触发自动部署
git tag v1.0.0
git push origin v1.0.0
# 按版本排序列出标签
git tag -l --sort=-version:refname生产发布工作流程
完整发布流程:
# 1. 准备发布分支
git checkout main
git pull origin main
git checkout -b release/v1.2.0
# 2. 更新版本文件
echo "1.2.0" > VERSION
git add VERSION package.json  # 更新相关文件中的版本
git commit -m "Bump version to 1.2.0"
# 3. 建立并推送标签
git tag -a v1.2.0 -m "发布 v1.2.0
新功能:
- 用户验证系统
- 仪表板分析
- 移动响应式设计
错误修复:
- 修复数据处理内存泄漏
- 解决 Safari 上的 CSS 布局问题
破坏性变更:
- API 端点 /old-api 已废弃
- 需要 Node.js 18+"
# 4. 推送所有内容
git push origin release/v1.2.0
git push origin v1.2.0
# 5. 合并回主分支
git checkout main
git merge release/v1.2.0
git push origin main
# 6. 部署(由 CI/CD 中的标签触发)
# GitHub Actions、GitLab CI、Jenkins 等会看到标签CI/CD 整合范例(GitHub Actions):
# .github/workflows/release.yml
name: Release
on:
  push:
    tags:
      - 'v*'
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Extract version
        run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
      - name: Build and deploy
        run: |
          npm ci
          npm run build
          npm run deploy紧急修复发布流程:
# 生产环境紧急修复
git checkout tags/v1.2.0
git checkout -b hotfix/v1.2.1
# 修复关键问题
git add .
git commit -m "修复关键安全漏洞"
# 标记紧急修复
git tag -a v1.2.1 -m "紧急修复 v1.2.1 - 安全补丁"
git push origin v1.2.1
# 合并回 main 和 develop
git checkout main
git merge hotfix/v1.2.1
git push origin main搜索与查找
内容搜索
# 搜索内容
git grep "搜索字符串"
git grep -n "搜索字符串"         # 显示行号
# 搜索历史
git log --grep="关键字"
git log --author="作者"
git log -S "程序代码字符串"         # 搜索程序代码变更
# 查看文件历史
git log filename.txt
git log -p filename.txt        # 显示变更内容
git blame filename.txt         # 逐行显示作者调试工具
# 二分搜索
git bisect start
git bisect good commit-hash
git bisect bad commit-hash
# 查看引用历史
git reflog
git reflog expire --expire=now --all维护清理
清理操作
# 清理未跟踪文件
git clean -n                   # 预览
git clean -f                   # 清理文件
git clean -fd                  # 清理文件和文件夹
# 垃圾回收
git gc
git gc --aggressive            # 积极清理
# 检查完整性
git fsck
git fsck --full设定管理
# 忽略文件变更
git update-index --skip-worktree filename.txt
git update-index --no-skip-worktree filename.txt
# 变更远端 URL
git remote set-url origin new-url
# 重写历史(危险)
git filter-branch --env-filter 'export GIT_AUTHOR_EMAIL="[email protected]"'工作流程
标准流程
# 功能开发流程
git switch main
git pull origin main
git switch -c feature/new-feature
# 开发完成
git add .
git commit -m "完成新功能"
git push -u origin feature/new-feature
# 合并清理
git switch main
git pull origin main
git merge feature/new-feature
git branch -d feature/new-feature
git push origin main冲突处理
# 查看冲突
git status
git diff
git diff --ours              # 你的变更
git diff --theirs            # 他们的变更
# 解决冲突后
git add 已解决文件
git commit
# 或放弃合并
git merge --abort高级冲突管理
高级冲突处理
预防策略:
# 频繁同步以避免大型冲突
git fetch origin
git diff origin/main         # 合并前检查差异
git merge --no-commit origin/main  # 预览合并而不提交团队工作流程中的冲突预防
1. 小而频繁的分支:
# 好的:小而专注的变更
git checkout -b feature/fix-login-button
# 进行 1-3 个相关变更
git push origin feature/fix-login-button
# 坏的:大型长期分支
git checkout -b feature/complete-redesign
# 工作数周而不同步2. 定期主分支同步:
# 功能分支的日常例行程序
git checkout feature/my-work
git fetch origin
git merge origin/main         # 或在安全时 rebase
git push origin feature/my-work
# 这让您的分支与 main 保持接近,减少冲突3. Pull Request 最佳实践:
# 建立 PR 前,确保是最新的
git checkout feature/my-work
git fetch origin
git merge origin/main
git push origin feature/my-work
# 现在建立 PR - 发生冲突的可能性大大降低4. 团队沟通协议:
- 宣布重大重构 - 警告团队可能的冲突
- 协调共享文件变更 - 讨论何时谁变更什么
- 使用功能开关 - 避免发布中的大型合并冲突
- 将大型功能拆分 为较小的独立 PR
冲突解决工具:
# 设定合并工具(一次性设定)
git config --global merge.tool vimdiff
git config --global merge.tool code
# 使用合并工具处理冲突
git mergetool
# 查看文件历史以了解背景
git log --oneline -- filename.txt
git blame filename.txtRebase 过程中的冲突:
# 修复冲突后继续
git add 已解决文件
git rebase --continue
# 跳过有问题的提交
git rebase --skip
# 中止整个 rebase
git rebase --abort紧急救援
常见问题
# 撤销 git add
git reset HEAD filename.txt
# 找回删除的提交
git reflog
git cherry-pick commit-hash
# 完全重置
git fetch origin
git reset --hard origin/main
# 强制推送(小心使用)
git push --force-with-lease强制推送:核弹选项
理解强制推送:
git push --force              # 核弹:完全覆盖远端
git push --force-with-lease   # 较安全:先检查冲突
git push --force-if-includes  # 最安全:更多保护检查真实强制推送场景:
# 您的功能分支有提交 A-B-C
# 您进行 rebase 清理历史
git rebase -i HEAD~3
# 现在您有 A'-B'-C'(不同的提交散列)
# 正常推送会失败
git push  # 错误:更新被拒绝
# 解决方案:强制推送(小心!)
git push --force-with-lease origin feature/my-branchForce Push 的真实灾难场景
如果您在共享分支使用 --force,队友会遇到什么:
步骤 1:灾难发生
# 您在共享的 feature/login 分支强制推送
git push --force origin feature/login步骤 2:队友 Alice 的体验
# Alice 尝试推送她的工作
git push origin feature/login
# 错误:! [rejected] feature/login -> feature/login (non-fast-forward)
# Alice 尝试拉取
git pull origin feature/login
# 错误:Your branch and 'origin/feature/login' have diverged,
# and have 2 and 3 different commits each, respectively.步骤 3:Alice 看到的混乱
git log --oneline --graph
# * abc123 (HEAD -> feature/login) Alice's work
# * def456 Alice's previous work
# | * 789xyz (origin/feature/login) Your new history after force push
# | * 456abc Your rewritten commits
# |/
# * 123def Common ancestor步骤 4:队友的痛苦恢复过程
# Alice 的正确恢复方式(复杂且容易出错):
git fetch origin
git branch backup-alice-work    # 先备份自己的工作!
# 选项 1:重新应用工作(推荐)
git reset --hard origin/feature/login
git cherry-pick backup-alice-work~1..backup-alice-work
# 选项 2:合并冲突(可能很复杂)
git merge origin/feature/login  # 会有很多冲突
# Alice 现在也必须强制推送(连锁反应)
git push --force-with-lease origin feature/login真实后果统计:
- 团队 3 人协作的分支被强制推送
- 每人平均花费 30-60 分钟恢复工作
- 可能丢失 2-4 小时的开发进度
- 需要团队紧急会议讨论历史重建
- CI/CD 管道可能中断或产生错误构建
安全强制推送协议:
- 先沟通 - 强制推送前告知团队
- 使用 —force-with-lease - 防止覆盖他人工作
- 只在功能分支 - 绝不在 main/共享分支
- 确认没有协作者 - 检查分支是否有其他人的提交
- 备份重要工作 - 危险操作前建立分支
危险操作 - 使用前请阅读
历史重写指令(绝对不要用于共享分支):
# 这些指令会重写历史 - 在团队环境中极其危险
git rebase -i HEAD~3          # 交互式重整
git reset --hard HEAD~1       # 永久删除
git push --force              # 危险:覆盖远端
git push --force-with-lease   # 较安全:先检查冲突关键警告:
- 绝对不要重整已发布/共享的提交 - 会破坏他人的工作
- 绝对不要使用 —force 而不用 —with-lease - 可能摧毁他人的工作
- 危险操作前务必备份重要工作
- 任何历史变更操作前都要与团队沟通
安全替代方案:
# 在共享分支使用合并而非重整
git merge feature-branch
# 使用 revert 而非硬重置以保留历史
git revert commit-hash
# 使用 --force 时,创建新分支
git checkout -b fix-branch修复问题
# 修复分离的 HEAD
git switch main
# 修复损坏的索引
git reset --mixed HEAD
# 重建索引
rm .git/index
git resetGit 指令速查
基础操作
git status                      # 查看当前状态
git add .                       # 添加所有变更
git commit -m "message"         # 提交变更
git push origin main            # 推送到远端
git pull                        # 拉取更新分支管理
git branch                      # 查看分支
git switch -c branch-name       # 建立并切换分支
git merge branch-name           # 合并分支
git branch -d branch-name       # 删除分支恢复操作
git reset HEAD filename.txt     # 撤销暂存
git restore filename.txt        # 恢复文件
git reset --hard HEAD~1         # 强制回退
git stash                       # 暂存变更查看信息
git log --oneline               # 简洁历史
git diff                        # 查看差异
git blame filename.txt          # 逐行作者
git remote -v                   # 查看远端Git 版本兼容性与旧版指令
指令版本需求
现代指令(Git 2.23+):
git switch branch-name         # Git 2.23(2019)引入
git restore filename.txt       # Git 2.23(2019)引入旧版指令(仍然有效):
git checkout branch-name       # 适用于所有 Git 版本
git checkout filename.txt      # 适用于所有 Git 版本何时需要使用旧版指令:
- Git 版本 < 2.23:某些默认环境还没更新到支持 switch/restore 的版本
- CI/CD 系统:许多自动化脚本仍依赖 checkout 指令
- IDE 和工具:某些开发工具内部仍使用 checkout
- 团队规范:项目可能要求使用旧版指令保持一致性
何时使用旧版指令
git checkout 并未废弃,仍适用于:
# 检出特定提交(分离的 HEAD)- switch 无法做到
git checkout commit-hash
git checkout HEAD~2
git checkout tags/v1.0.0
# 从特定提交检出文件 - restore 在此有限制
git checkout commit-hash -- filename.txt
git checkout HEAD~3 -- src/config.js
# 从特定提交建立分支
git checkout -b new-branch commit-hash
git checkout -b hotfix tags/v1.0.0
# 稀疏检出(高级功能)
git checkout --sparse-checkout
# 旧的 CI/CD 系统和脚本
# 某些 IDE 和 Git 工具内部仍使用 checkout指令能力对照表
| 操作 | checkout | switch | restore | 
|---|---|---|---|
| 切换分支 | ✓ | ✓ | ✗ | 
| 建立分支 | ✓ | ✓ | ✗ | 
| 分离 HEAD | ✓ | ✗ | ✗ | 
| 恢复工作文件 | ✓ | ✗ | ✓ | 
| 从提交恢复 | ✓ | ✗ | ✓ | 
| 恢复暂存文件 | ✓ | ✗ | ✓ | 
| 复杂场景 | ✓ | 有限 | 有限 | 
何时您必须使用 checkout:
- Git 版本 < 2.23(没有 switch/restore 可用)
- 检出特定提交以供探索
- 从任意提交进行复杂文件恢复
- 尚未更新的旧脚本
- 尚未迁移到新指令的 IDE/工具
最佳实践策略
新项目(Git 2.23+):
- 分支操作使用 git switch
- 文件操作使用 git restore
- 高级情境学习 git checkout
旧版系统:
- Git 版本 < 2.23 时坚持使用 git checkout
- 检查 Git 版本:git --version
团队环境:
- 建立团队惯例
- 记录要使用哪些指令
- 考虑最低公分母方法
检查您的 Git 版本
# 检查目前 Git 版本
git --version
# 更新 Git(依系统而定)
# macOS 使用 Homebrew: brew update && brew upgrade git
# Ubuntu/Debian: sudo apt update && sudo apt upgrade git
# Windows: 从 git-scm.com 下载最低建议版本:
- Git 2.23+(用于 switch/restore 指令)
- Git 2.17+(用于大多数现代功能)
- Git 2.0+(用于基本专业使用)
 
  
  
 