Git 命令大全:覆盖日常开发场景的实战指南
导语还在为 Git 命令太多记不住而烦恼吗这篇文章尽可能提供最全面的 Git CLI 实战指南涵盖配置、初始化、分支管理、冲突解决等 11 大模块配有详细示例和避坑提示让你从 Git 小白进阶为团队中的版本控制高手。建议收藏备用随时查阅 目录导航一、Git 核心概念与首次配置二、仓库初始化与克隆三、基本工作流程核心三连四、分支管理全攻略五、远程仓库操作六、日志查看与差异对比七、撤销与回退重点八、标签管理九、Stash 暂存技巧十、冲突解决指南十一、实用技巧与避坑总结一、Git 核心概念与首次配置1.1 必懂的 5 个核心概念概念说明类比理解Repository仓库项目的存储位置包含所有版本历史项目的保险箱Working Directory工作区你正在编辑文件的目录办公桌上的文件Staging Area暂存区准备提交的文件快照区域打包好的快递盒Commit提交记录项目在特定时间点的状态快递的发货记录Branch分支独立的开发线路同一项目的不同副本1.2 Git 的三种状态plaintext工作区 (Working Dir) ──git add──► 暂存区 (Staging) ──git commit──► 仓库 (.git) ▲ │ └──────────────────git checkout──────────────────────┘⚠️理解这个流程是掌握 Git 的基础工作区 → 暂存区 → 仓库修改需要先add再commit。1.3 首次使用配置必做bash# 设置全局用户名所有仓库使用 git config --global user.name Your Name # 设置全局邮箱重要会出现在你的每次提交中 git config --global user.email your.emailexample.com # 设置默认分支名推荐使用 main git config --global init.defaultBranch main # 启用命令行高亮让输出更易读 git config --global color.ui auto # 设置提交信息默认编辑器 git config --global core.editor vim1.4 配置查看与修改bash# 查看所有配置 git config --list # 查看全局配置 git config --global --list # 查看某个配置项 git config --global user.name # 编辑全局配置文件 git config --global --edit # 删除某个配置项 git config --global --unset user.name1.5 配置别名强烈推荐给常用命令起短别名大幅提升效率bash# 为常用命令创建简短别名 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 config --global alias.unstage reset HEAD -- git config --global alias.last log -1 HEAD git config --global alias.logg log --graph --oneline --decorate --all # 使用别名后的效率对比 # ❌ 原命令 git status git checkout -b feature-branch git log --graph --oneline # ✅ 别名命令只需敲 3 个字母 git st git co -b feature-branch git logg二、仓库初始化与克隆2.1 初始化新仓库bash# 在当前目录初始化 Git 仓库 git init # 指定目录初始化 git init project-name # 初始化并指定初始分支名Git 2.28 git init --initial-branchmain # 初始化一个裸仓库用于共享/服务器 git init --bare my-repo.git2.2 克隆远程仓库bash# 克隆默认分支的最新版本 git clone https://github.com/username/repository.git # 克隆到指定目录 git clone https://github.com/username/repository.git my-folder # 克隆指定分支 git clone --branch develop https://github.com/username/repository.git # 只克隆最近一次提交适合大型仓库加速下载 git clone --depth 1 https://github.com/username/repository.git # 使用 SSH 克隆需要配置 SSH Key git clone gitgithub.com:username/repository.gitSSH vs HTTPSSSH 需要配置密钥但无需每次输入密码推荐日常使用。2.3 .git 目录结构了解即可plaintext.git/ ├── HEAD # 指向当前分支的指针 ├── branches/ # 分支引用 ├── config # 仓库配置文件 ├── description # 仓库描述 ├── hooks/ # 钩子脚本CI/CD 常用 ├── info/ # 额外信息 ├── objects/ # 所有数据对象blob、tree、commit └── refs/ # 指向 commit 的指针三、基本工作流程核心三连Git 最核心的三个操作add→commit→push这是每个开发者每天都要重复几十次的操作3.1 检查状态bash# 查看完整状态 git status # 简洁模式推荐 git status -s简洁模式符号说明符号含义??未跟踪的新文件A已添加到暂存区M左已修改工作区M右已修改暂存区MM部分暂存、部分未暂存3.2 添加文件到暂存区bash# 添加单个文件 git add filename.txt # 添加所有变更的文件 git add . # 添加所有已跟踪文件的变更不包括新文件 git add -u # 添加所有文件包括未跟踪 git add -A # 添加特定目录 git add src/ # 交互式添加选择性添加文件的部分内容 git add -p⚠️常用的是git add .和git add -u建议用git add -u避免意外提交新文件。3.3 提交更改bash# 基本提交 git commit -m 提交信息 # 提交所有已跟踪文件的变更不包括新文件 git commit -am 提交信息 # 修改最后一次提交追加文件或修改提交信息 git commit --amend # 修改最后一次提交不修改提交信息 git commit --amend --no-edit # 创建空提交用于触发 CI/CD git commit --allow-empty -m Trigger build3.4 推送更改bash# 推送到默认远程仓库的当前分支 git push # 推送到指定远程仓库的指定分支 git push origin main # 首次推送并设置上游分支 git push -u origin feature-branch # ⚠️ 强制推送谨慎使用会覆盖远程历史 git push --force # 推送所有分支 git push --all # 推送标签 git push --tags3.5 拉取更改bash# 拉取并合并当前分支最常用 git pull # 拉取指定分支 git pull origin main # 变基模式拉取保持提交历史线性更干净 git pull --rebase # 仅获取远程引用不合并 git fetch originpull vs fetch直接git pull会自动合并git fetch只获取不合并推荐先 fetch 查看变化。3.6 完整工作流程示例bash# 场景修改了三个文件准备提交 $ git status On branch main Changes not staged for commit: modified: README.md modified: src/index.js deleted: old-file.txt # 添加需要提交的文件 $ git add README.md src/index.js # 提交 $ git commit -m Update README and refactor index.js # 推送到远程 $ git push origin main四、分支管理全攻略4.1 查看分支bash# 查看本地分支 git branch # 查看所有分支包括远程 git branch -a # 查看已合并到当前分支的分支 git branch --merged # 查看未合并到当前分支的分支 git branch --no-merged # 查看每个分支的最新提交 git branch -v # 查看分支与远程分支的追踪关系 git branch -vv4.2 创建分支bash# 创建新分支不会自动切换 git branch feature-login # 创建新分支并切换 git checkout -b feature-login # 新版命令创建并切换Git 2.23推荐 git switch -c feature-login # 基于远程分支创建本地分支 git checkout -b feature-login origin/feature-login # 基于某个提交创建分支 git checkout -b hotfix v1.0.1 # 创建并推送到远程同时创建远程分支 git push -u origin feature-login4.3 切换分支bash# 切换到已有分支 git checkout main git switch main # 新版命令 # 切换到上一个分支 git switch - # 切换到指定提交进入分离 HEAD 状态 git checkout a1b2c3d # 丢弃本地修改切换分支⚠️ 谨慎使用会丢失修改 git checkout --force main4.4 重命名分支bash# 重命名当前分支 git branch -m old-name new-name # 重命名其他分支 git branch -m old-name new-name # 对远程分支重命名需要三步 git branch -m old-name new-name # 1. 重命名本地 git push --delete origin old-name # 2. 删除远程旧分支 git push -u origin new-name # 3. 推送新分支4.5 删除分支bash# 删除已合并的本地分支 git branch -d feature-login # ⚠️ 强制删除本地分支即使未合并 git branch -D feature-login # 删除远程分支 git push origin --delete feature-login # 清理已删除的远程分支引用 git fetch --prune4.6 合并分支bash# 将指定分支合并到当前分支 git merge feature-branch # 合并时创建一个合并提交即使快进推荐 git merge --no-ff feature-branch # 合并但不自动提交 git merge --no-commit feature-branch # 取消合并 git merge --abort # 压缩合并将源分支的所有提交合并为一个 git merge --squash feature-branch4.7 变基Rebase⚠️重要不要对已推送到远程的提交进行变基这会导致历史记录混乱其他人的分支会出问题。bash# 将当前分支变基到目标分支 git rebase main # 继续变基解决冲突后 git rebase --continue # 取消变基 git rebase --abort # 交互式变基修改提交历史可以合并、修改、删除提交 git rebase -i HEAD~34.8 分支操作完整流程bash# 场景从 main 创建功能分支开发 $ git checkout main $ git pull origin main # 创建功能分支 $ git checkout -b feature-user-auth # 开发完成后切换到 main 并更新 $ git checkout main $ git pull origin main # 合并功能分支推荐使用 --no-ff $ git merge --no-ff feature-user-auth # 删除功能分支 $ git branch -d feature-user-auth # 推送更新 $ git push origin main五、远程仓库操作5.1 查看远程仓库bash# 查看所有远程仓库 git remote -v # 查看远程仓库详细信息 git remote show origin # 查看远程仓库名称 git remote5.2 添加远程仓库bash# 添加远程仓库 git remote add origin https://github.com/username/repo.git # 添加上游仓库Fork 场景 git remote add upstream https://github.com/original/repo.git # 使用 SSH 地址 git remote add origin gitgithub.com:username/repo.git5.3 修改和删除远程仓库bash# 重命名远程仓库 git remote rename origin old-origin # 修改远程仓库 URL git remote set-url origin https://github.com/username/new-repo.git # 删除远程仓库 git remote remove origin # 清除所有无效的远程分支引用 git remote prune origin5.4 Fork 仓库工作流贡献开源必备bash# 1. 克隆自己的 Fork git clone https://github.com/your-name/repo.git # 2. 添加上游仓库 git remote add upstream https://github.com/original/repo.git # 3. 保持与上游同步 git fetch upstream git checkout main git merge upstream/main # 4. 创建功能分支开发 git checkout -b feature # 5. 推送分支到自己的 Fork git push origin feature # 6. 在 GitHub 上创建 Pull Request六、日志查看与差异对比6.1 查看提交历史bash# 查看完整提交历史 git log # 每行显示一个提交最常用 git log --oneline # 显示最近 5 条记录 git log -5 # 显示分支合并图 git log --graph --oneline --all # 显示文件修改统计 git log --stat # 显示每次提交的文件列表 git log --name-only # 搜索提交信息 git log --grepfix bug # 显示某个文件的提交历史 git log --follow filename.txt6.2 日志格式化bash# 自定义格式输出 git log --prettyformat:%h - %an, %ar : %s # 格式化符号说明 # %H 提交 hash完整 # %h 简短 hash # %an 作者名字 # %ae 作者邮箱 # %ad 作者日期 # %ar 相对日期 # %s 提交说明 # %b 提交正文6.3 查看差异bash# 查看工作区的变更未暂存 git diff # 查看暂存区的变更已 add 未 commit git diff --staged # 查看特定文件的差异 git diff filename.txt # 比较两个分支的差异 git diff main..feature-branch # 比较指定提交与当前的差异 git diff HEAD~3 # 统计变更行数 git diff --stat # 忽略空白变更 git diff -w6.4 查看文件内容bash# 查看某次提交的文件内容 git show abc123:filename.txt # 查看最近一次提交 git show HEAD # 查看暂存区文件内容 git show :filename.txt6.5 查看谁修改了某行代码bash# 查看文件每行的最后修改者和提交 git blame filename.txt # 从第 10 行开始显示 20 行 git blame -L 10,30 filename.txt七、撤销与回退重点这是最容易出错的部分建议仔细阅读7.1 撤销工作区的修改bash# 撤销单个文件的修改恢复到最近提交状态 git checkout -- filename.txt git restore filename.txt # 新版命令 # 撤销所有文件的修改 git checkout -- . git restore .7.2 撤销暂存区操作bash# 撤销暂存从暂存区移回工作区 git reset HEAD filename.txt git restore --staged filename.txt # 新版命令 # 撤销所有文件的暂存 git reset HEAD git restore --staged .7.3 修改最后一次提交bash# 追加文件到上一次提交 git add forgotten-file.txt git commit --amend --no-edit # 修改提交信息 git commit --amend -m 新的提交信息⚠️注意--amend会修改提交历史只能用于修改还未 push 的提交7.4 回退到历史版本bash# 回退到上一个版本保留工作区修改 git reset HEAD~1 # 回退到上一个版本保留工作区和暂存区 git reset --soft HEAD~1 # 回退到上一个版本丢弃所有修改⚠️ git reset --hard HEAD~1 # 回退到指定版本 git reset --hard abc123def # 回退到指定版本保留工作区修改 git reset --mixed abc123def7.5 三种 reset 模式对比命令工作区暂存区HEAD适用场景git reset --soft HEAD~1✅ 保留✅ 保留⬅️ 移动想重新提交git reset --mixed HEAD~1✅ 保留❌ 清空⬅️ 移动想重新 addgit reset --hard HEAD~1❌ 丢弃❌ 丢弃⬅️ 移动彻底回退7.6 使用 Revert安全回退推荐使用 revert 而不是 reset 来回退已推送的提交因为 revert 会创建新提交不会修改历史。bash# 创建一个新的提交来撤销指定提交的修改 git revert HEAD # 撤销指定提交 git revert abc123def # 撤销多个提交 git revert abc123..def456 # 不自动提交 git revert --no-commit abc1237.7 回退远程分支bash# ✅ 推荐使用 revert 回退安全 git revert HEAD git push origin main # ⚠️ 谨慎使用 reset 回退后强制推送 git reset --hard HEAD~3 git push --force origin main7.8 恢复误删的提交bash# 查看所有操作日志 git reflog # 输出示例 # a1b2c3d HEAD{0}: reset: moving to HEAD~3 # e4f5g6h HEAD{1}: commit: Add feature # ... # 恢复到指定状态 git reset --hard HEAD{1} # 恢复误删的分支 git checkout -b recovered-branch abc123八、标签管理8.1 查看标签bash# 列出所有标签 git tag # 搜索标签 git tag -l v1.* # 查看标签详细信息 git show v1.0.08.2 创建标签bash# 为当前提交创建轻量标签 git tag v1.0.0 # 为历史提交创建标签 git tag v0.9.0 abc123 # 创建带注释的标签推荐 git tag -a v1.0.0 -m 版本 1.0.0 发布 # 创建带签名标签需要 GPG 密钥 git tag -s v1.0.0 -m 签名标签推荐使用 annotated 标签可以包含标签说明和作者信息。8.3 推送标签bash# 推送单个标签 git push origin v1.0.0 # 推送所有标签 git push --tags # 推送标签并设置为默认上游 git push -u origin v1.0.08.4 删除标签bash# 删除本地标签 git tag -d v1.0.0 # 删除远程标签 git push origin --delete v1.0.0九、Stash 暂存技巧stash 就是 Git 的后悔药可以临时保存未提交的修改切换分支后再恢复。9.1 保存工作进度bash# 保存当前工作进度 git stash # 保存时添加说明 git stash save 正在开发用户模块 # 保存未跟踪文件 git stash -u # 保存所有文件包括忽略的文件 git stash -a9.2 查看 stash 列表bash# 查看所有 stash git stash list # 输出示例 # stash{0}: WIP on main: abc123 Update README # stash{1}: WIP on main: def456 Add feature9.3 恢复工作进度bash# 恢复最近一次 stash并从列表中删除 git stash pop # 恢复最近一次 stash保留列表记录 git stash apply # 恢复指定的 stash git stash apply stash{2}9.4 管理 stashbash# 查看 stash 修改的内容 git stash show # 查看详细的 stash 内容 git stash show -p # 从 stash 创建分支 git stash branch new-feature stash{0} # 删除指定的 stash git stash drop stash{0} # 清空所有 stash git stash clear9.5 实用场景bash# 场景 1临时切换分支处理其他问题 $ git stash $ git checkout hotfix # ... 修复问题并提交 ... $ git checkout original-branch $ git stash pop # 场景 2pull 前保存本地修改 $ git stash $ git pull --rebase origin main $ git stash pop # 场景 3从 stash 创建新分支 $ git stash $ git checkout -b feature-recovery $ git stash pop十、冲突解决指南10.1 冲突的产生当两个分支修改了同一文件的同一位置Git 无法自动合并时就会产生冲突。diff HEAD 当前分支的修改 其他分支的修改 feature-branch10.2 查看冲突文件bash# 查看冲突状态 git status # 列出所有冲突文件 git diff --name-only --diff-filterU10.3 解决冲突的三种方法方法 1手动编辑最常用bash# 1. 打开冲突文件删除冲突标记保留需要的代码 HEAD console.log(Current branch code); console.log(Feature branch code); feature-branch # 修改后变为 console.log(Resolved code); # 2. 添加修改后的文件 git add conflicted-file.txt # 3. 提交合并 git commit -m Resolve merge conflict方法 2使用合并工具bash# 启动配置的合并工具 git mergetool # 常用合并工具vimdiff, kdiff3, meld, beyond compare git config merge.tool vimdiff方法 3接受某一方的版本bash# 接受当前分支的版本 git checkout --ours conflicted-file.txt git add conflicted-file.txt # 接受其他分支的版本 git checkout --theirs conflicted-file.txt git add conflicted-file.txt10.4 Abort 操作取消合并bash# 取消合并 git merge --abort # 取消 rebase git rebase --abort # 取消 cherry-pick git cherry-pick --abort十一、实用技巧与避坑总结11.1 推荐配置的别名ini# ~/.gitconfig 文件中的 alias 部分 [alias] # 状态 st status -sb # 日志 lg log --graph --prettyformat:%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset --abbrev-commit # 简洁日志 ll log --oneline --graph --all # 差异 di diff dc diff --staged # 提交 ci commit ca commit --amend cane commit --amend --no-edit # 分支 br branch co checkout nb checkout -b # 暂存 ss stash sp stash pop # 拉取 pr pull --rebase11.2 提交信息规范推荐bash# 推荐格式 type(scope): subject # type 类型说明 feat: 新功能 fix: 修复 bug docs: 文档更新 style: 代码格式不影响功能 refactor: 重构 perf: 性能优化 test: 测试相关 chore: 构建或辅助工具 # 示例 git commit -m feat(auth): Add user login functionality git commit -m fix(profile): Resolve avatar upload issue git commit -m docs(readme): Update installation guide11.3 常见问题解决bash# 问题合并时提示 fatal: refusing to merge unrelated histories git merge --allow-unrelated-histories branch-name # 问题推送被拒绝需要先 pull git pull --rebase origin main git push origin main # 问题分支名大小写不识别 git branch -m Feature-branch feature-branch # 问题Git 操作非常慢 git gc --aggressive # 问题恢复误删文件 git checkout HEAD -- deleted-file.txt # 问题取消暂存但不删除修改 git reset HEAD filename.txt11.4 忽略文件配置创建.gitignore文件gitignore# 忽略所有 .log 文件 *.log # 忽略 node_modules 目录 node_modules/ # 忽略特定文件 config.secret # 忽略所有 .txt 但保留 README.txt *.txt !README.txt # 忽略特定目录 build/ dist/11.5 安全建议⚠️这些错误千万别犯不要在 Git 中存储敏感信息密码、API Key 等已提交敏感文件后git filter-repo --invert-paths --path config/secrets.yml不要对已推送的提交进行变基强制推送前务必三思git push --force会覆盖他人工作推送前先检查bashgit diff --staged # 检查暂存内容 git status # 确认状态11.6 快速参考卡片操作命令查看状态git status添加文件git add .提交git commit -m message推送到远程git push拉取更新git pull创建分支git checkout -b name切换分支git switch name合并分支git merge name查看日志git log --oneline查看差异git diff保存进度git stash恢复进度git stash pop 学习资源推荐 官方文档https://git-scm.com/doc 交互式学习https://learngitbranching.js.org/ Git 简明指南https://rogerdudler.github.io/git-guide/ 总结这篇文章涵盖了 Git 命令行日常使用的 95% 场景✅配置与初始化首次使用必做配置✅基本三连add → commit → push✅分支管理创建、切换、合并、变基✅撤销回退reset、revert、reflog✅冲突解决手动、工具、Abort✅Stash 技巧临时保存工作进度✅实用别名大幅提升效率觉得有用就点个赞吧你的支持是我持续输出高质量教程的动力
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2567457.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!