从入门到精通详解Git高级用法的实战指南

作者:

文章目录
  • 编辑 ~/.gitconfig 文件,添加以下内容: [alias] # 常用简写 co = checkout br = branch cm = commit st = status # 高级功能 unstage = reset HEAD — last = log -1 HEAD visual = !gitk # 漂亮的日志 lg = log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –date=relative # 快速查看文件变化 diffc = diff –cached 使用效果: git st # 等同于 git status git lg # 查看漂亮的提交图 git cm -am “fix: 快速提交” # 添加并提交
  • 假设你要开发一个新功能: 创建分支: git switch -c feature/user-profile 开发并提交(原子性): # 修改了 3 个文件,但只想提交其中 2 个的相关修改 git commit -p -m “feat: 添加用户头像上传” git commit -p -m “feat: 添加用户信息编辑” 同步主干: git fetch origin git rebase origin/main # 变基,保持历史整洁 提交审查: git push origin feature/user-profile # 在 GitLab/GitHub 上创建 Merge Request 合并后清理: git switch main git pull git branch -d feature/user-profile
  • 场景 推荐命令 避免命令 日常提交 git commit -p git commit -am "update" 更新主干代码 git rebase origin/main git merge origin/main 修复错误提交 git commit –amend 重新提交一个新 commit 临时切换分支 git stash git commit -m "temp" 撤销远程提交 git revert git reset –hard 查看历史 git lg git log 记住核心原则: 本地分支随意改:rebase、reset、amend 随你便。 公共分支别乱动:main、develop 只用 merge 和 revert。 提交要原子化:一个提交只做一件事,方便回滚和审查。 掌握这些技巧,你将从 Git 使用者进阶为 Git 大师,让你的开发流程更加顺畅、高效。 以上就是从入门到精通详解Git高级用法的实战指南的详细内容,更多关于Git高级用法的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: git stash命令基本用法详解 git push指令常见选项和用法详解 你不知道的Git log还有这种用法 git stash的正确用法详解 Git分支参数 -u 和 -m 的具体使用 使用Git实现revert的完整操作步骤
  • 目录
    • 一、基础但高效的日常操作
      • 1. 精准查看状态:git status -sb
      • 2. 智能补全:git commit -a
      • 3. 精准提交:git commit -p
    • 二、分支管理的艺术
      • 1. 创建并切换分支:git checkout -b/git switch -c
      • 2. 清理已合并分支
      • 3. 变基而非合并:git rebase
    • 三、查看历史的黑魔法
      • 1. 图形化查看:git log –graph
      • 2. 查看文件修改历史:git blame
      • 3. 搜索提交历史:git log -S
    • 四、拯救错误的时光机
      • 1. 修改最后一次提交:git commit –amend
      • 2. 安全回退:git resetvsgit revert
      • 3. 急救箱:git reflog
    • 五、暂存的艺术:git stash
      • 1. 临时切换分支
      • 2. 查看和应用特定暂存
    • 六、团队协作的高级技巧
      • 1. 挑选提交:git cherry-pick
      • 2. 二分法找 Bug:git bisect
    • 七、配置别名提升效率
      • 八、实战工作流示例
        • 总结:Git 高效使用 Checklist

          Git 是现代软件开发不可或缺的工具,但很多人只停留在 git addgit commitgit push 的基础操作上。本文将带你深入 Git 的高级用法,通过实际场景和案例,教你如何像专家一样高效使用 Git。

          # 传统方式:信息冗长
          git status
          
          # 高效方式:简洁单行显示
          git status -sb
          

          输出示例:

          ## main…origin/main
          M src/app.js
          A src/new-feature.js
          ?? untracked-file.txt

          优势:一眼看清哪些文件被修改(M)、新增(A)或未跟踪(??),以及当前分支与远程的差异。

          # 繁琐方式:先添加再提交
          git add .
          git commit -m "fix: 修复登录bug"
          # 高效方式:自动添加已跟踪文件的修改
          git commit -am "fix: 修复登录bug"

          注意-a 只会提交已跟踪文件的修改,不会提交新文件(untracked)。适合快速提交日常修改。

          # 场景:一个文件里改了两处不相关的逻辑
          # 错误做法:一次性提交所有修改
          git add file.js && git commit -m "update"
          
          # 正确做法:交互式选择要提交的代码块
          git commit -p
          

          操作流程:

          Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y  # 提交这个代码块
          Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? n  # 不提交这个代码块
          

          优势:实现原子性提交,每个提交只做一件事,便于代码审查和回滚。

          # 传统两步操作
          git branch feature/login
          git checkout feature/login
          
          # 高效一步到位
          git checkout -b feature/login
          # 或(Git 2.23+ 推荐)
          git switch -c feature/login
          

          # 查看已合并到当前分支的分支
          git branch --merged
          
          # 删除已合并的本地分支(安全)
          git branch -d feature/login
          
          # 强制删除未合并的分支(危险!)
          git branch -D feature/login
          

          # 场景:你在 feature 分支开发,main 分支有更新
          # 传统方式(会产生 merge commit,污染历史)
          git checkout main
          git pull
          git checkout feature
          git merge main
          
          # 高效方式(线性历史,干净整洁)
          git checkout feature
          git rebase main
          

          黄金法则不要在公共分支(如 main, develop)上使用 rebase,只对本地私有分支操作。

          # 一条命令看清分支拓扑
          git log --graph --oneline --decorate --all
          

          输出示例:

          * 3a2b1c (HEAD -> feature) feat: 添加用户认证
          | * 9f8e7d (main) fix: 修复首页布局
          |/
          * 1a2b3c init: 初始化项目

          # 谁在什么时间改了这行代码?(甩锅神器 😂)
          git blame src/auth.js
          

          输出示例:

          ^1a2b3c (Alice 2024-01-15 10:30:00 +0800 1) import React from 'react';
          3a2b1c9 (Bob   2024-01-16 14:20:00 +0800 2) export const login = () => {}

          # 查找“哪次提交删除了 console.log”
          git log -S "console.log" --oneline
          

          # 场景1:提交后发现漏了文件
          git add forgotten-file.js
          git commit --amend --no-edit  # --no-edit 不修改提交信息
          
          # 场景2:提交信息写错了
          git commit --amend -m "fix: 正确的提交信息"
          

          警告:不要对已经推送到远程的提交使用 --amend,除非你知道自己在做什么。

          命令 作用 使用场景
          git reset --soft HEAD~1 回退提交,保留修改在暂存区 想重新整理提交
          git reset --mixed HEAD~1 (默认) 回退提交,保留修改在工作区 想重新修改代码
          git reset --hard HEAD~1 彻底删除提交和修改 彻底不要这次提交了(危险!)
          git revert HEAD 创建一个新的提交来“反向”撤销 团队协作首选,不破坏历史

          # 当你误删分支或 reset 错了,一切都能救回来
          git reflog
          # 输出:abc1234 HEAD@{0}: reset: moving to HEAD~1
          #      def5678 HEAD@{1}: commit: feat: 添加支付功能
          
          # 恢复到误删前的状态
          git reset --hard def5678
          

          # 场景:正在 feature-A 上开发,突然需要去修紧急 bug
          # 错误做法:随便 commit 一下脏代码
          # 正确做法:暂存当前工作
          git stash push -m "暂存登录功能开发"
          git checkout main
          git pull
          git checkout -b hotfix/urgent-bug
          # ... 修完 bug 提交 ...
          
          # 回到 feature-A
          git checkout feature-A
          git stash pop  # 恢复之前的修改
          

          # 查看所有暂存
          git stash list
          # stash@{0}: On feature-A: 暂存登录功能开发
          # stash@{1}: On feature-B: 暂存UI调整
          
          # 应用但不删除暂存
          git stash apply stash@{1}
          

          # 场景:想把 feature-A 分支的某个特定提交复制到 main
          git log feature-A --oneline
          # abc1234 feat: 添加验证码功能
          # def5678 fix: 修复样式问题
          
          # 只把 abc1234 这个提交应用到当前分支
          git cherry-pick abc1234
          

          # 场景:不知道从哪个版本开始出现 Bug
          git bisect start
          git bisect bad HEAD        # 告诉 Git 当前版本是坏的
          git bisect good v1.0.0   # 告诉 Git v1.0.0 是好的
          
          # Git 会自动切到中间的提交
          # 你测试后告诉 Git 结果
          git bisect good  # 如果这个版本没问题
          git bisect bad   # 如果这个版本有问题
          
          # 最终 Git 会定位到第一个坏掉的提交
          git bisect reset  # 结束二分查找
          

          编辑 ~/.gitconfig 文件,添加以下内容:

          [alias]
              # 常用简写
              co = checkout
              br = branch
              cm = commit
              st = status
              
              # 高级功能
              unstage = reset HEAD --
              last = log -1 HEAD
              visual = !gitk
              
              # 漂亮的日志
              lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
              
              # 快速查看文件变化
              diffc = diff --cached
          

          使用效果:

          git st      # 等同于 git status
          git lg      # 查看漂亮的提交图
          git cm -am "fix: 快速提交"  # 添加并提交
          

          假设你要开发一个新功能:

          创建分支

          git switch -c feature/user-profile
          

          开发并提交(原子性)

          # 修改了 3 个文件,但只想提交其中 2 个的相关修改
          git commit -p -m "feat: 添加用户头像上传"
          git commit -p -m "feat: 添加用户信息编辑"
          

          同步主干

          git fetch origin
          git rebase origin/main  # 变基,保持历史整洁
          

          提交审查

          git push origin feature/user-profile
          # 在 GitLab/GitHub 上创建 Merge Request
          

          合并后清理

          git switch main
          git pull
          git branch -d feature/user-profile
          

          场景 推荐命令 避免命令
          日常提交 git commit -p git commit -am "update"
          更新主干代码 git rebase origin/main git merge origin/main
          修复错误提交 git commit --amend 重新提交一个新 commit
          临时切换分支 git stash git commit -m "temp"
          撤销远程提交 git revert git reset --hard
          查看历史 git lg git log

          记住核心原则

          1. 本地分支随意改rebaseresetamend 随你便。
          2. 公共分支别乱动maindevelop 只用 mergerevert
          3. 提交要原子化:一个提交只做一件事,方便回滚和审查。

          掌握这些技巧,你将从 Git 使用者进阶为 Git 大师,让你的开发流程更加顺畅、高效。

          以上就是从入门到精通详解Git高级用法的实战指南的详细内容,更多关于Git高级用法的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • git stash命令基本用法详解
          • git push指令常见选项和用法详解
          • 你不知道的Git log还有这种用法
          • git stash的正确用法详解
          • Git分支参数 -u 和 -m 的具体使用
          • 使用Git实现revert的完整操作步骤

          站内搜索