在代码的浩瀚宇宙中,Git 就像一艘可靠的星际战舰,承载着无数开发者的项目与梦想。作为一名拥有十余年开发经验的程序员,我早已与 Git 建立起深厚的 “革命友谊”。但即使是再熟悉的伙伴,偶尔也会在紧急操作时 “卡壳”。为了打造一份真正实用的 Git 命令宝典,我结合自身经验与最新技术趋势,将零散的命令系统整合,形成这份全场景覆盖的记录速查手册。
一、仓库构建与远程协作:搭建开发 “根据地”
仓库操作是使用 Git 的起点,从本地初始化到远程交互,每个环节都至关重要。
初始化本地仓库:git init 可在当前目录创建.git隐藏文件夹,开启版本控制;若需新建目录并初始化,git init [project-name] 一步到位
克隆远程仓库:git clone [url] 完整复刻仓库;git clone --depth=1 [url] 浅克隆节省资源;git clone --mirror [url] 用于创建完整镜像备份
远程仓库管理:通过 git remote add [名称] [远程仓库URL] 建立连接,git remote -v 查看详情;修改地址用 git remote set-url ,删除用 git remote rm
代码同步:git pull [远程名] [分支名] 拉取合并;git pull --rebase [远程名] [分支] 保持线性历史;git fetch [远程名] 仅获取不合并;推送时 git push [远程名] [本地分支]:[远程分支] 灵活控制分支同步
二、配置管理:定制专属开发环境
合理配置能让 Git 更贴合个人开发习惯。
查看与编辑:git config --list 展示所有配置,git config -e [--global] 可编辑全局或本地配置文件
用户信息设置:务必通过 git config [--global] user.name 和 git config [--global] user.email 设置身份信息,全局配置对所有仓库生效,本地配置仅作用于当前仓库
三、文件操作:掌控代码变化的 “显微镜”
对文件状态的精准管理,是高效开发的基础。
状态查看:git status 快速定位未跟踪、已修改、已暂存文件;git diff 系列命令(git diff/git diff --cached/git diff HEAD) 对比不同阶段差异
暂存与提交:git add 支持多种方式添加文件,git commit 提交时 -m 参数不可或缺;git commit --amend 可修改最后一次提交
文件管理:git rm 删除文件并更新版本控制,git mv 处理文件移动与重命名
四、提交与日志:追溯代码演进的 “时光机”
通过提交日志,能清晰复盘项目开发历程。
提交操作:常规提交外,git commit -a 跳过暂存直接提交,git commit --amend 用于修正提交
日志查看:git log 多种参数组合(--oneline/-p/--stat/--grep) 满足不同查看需求;git show 聚焦某次提交,git blame 追踪文件行修改历史,git reflog 记录 HEAD 操作轨迹
五、分支管理:并行开发的 “立交桥”
分支是 Git 实现高效协作的核心功能。
分支操作:git branch 系列命令(-r查看远程,-a查看所有) 管理分支列表;git checkout 与 git switch 实现分支切换,后者语义更清晰
合并与变基:git merge 常规合并,git merge --squash 压缩提交;git rebase 整理提交历史,git rebase -i 实现交互式变基
分支清理:git branch -d 删除本地分支,git push origin --delete 删除远程分支,git remote prune origin 清理无效远程引用
六、撤销与恢复:修正错误的 “后悔药”
开发中难免失误,Git 提供多种补救措施。
撤销修改:git restore 替代 git checkout -- 恢复文件,git reset 移除暂存区文件
回退提交:git reset --hard 彻底回退,git revert 安全撤销提交变更
工作区暂存:git stash 系列命令(push/pop/apply/list) 临时保存工作进度
七、标签管理:标记重要版本的 “里程碑”
标签常用于标记关键版本节点。
创建标签:git tag [标签名] 创建轻量标签,git tag -a -m 创建附注标签
标签操作:查看、推送、删除标签分别使用 git show/git push origin/git tag -d 等命令
八、高级功能:解锁 Git 的 “隐藏技能”
掌握这些高级功能,能大幅提升开发效率。
补丁与归档:git format-patch 生成补丁,git apply 与 git am 应用补丁;git archive 创建代码归档包
问题定位:git bisect 二分查找快速定位问题提交
子模块管理:git submodule 系列命令实现子模块添加、更新、初始化等操作
多工作树与清理:git worktree 支持多分支并行开发,git clean 清理未跟踪文件
选择性合并:git cherry-pick 精准应用特定提交到当前分支
九、账号管理:多仓库协作的 “通行证”
面对不同账号的多仓库协作,需灵活配置。
配置策略:全局与仓库特定配置按需设置,修改远程地址添加账号信息
凭证管理:git config --global credential.helper store 记住密码,git config --global core.editor 设置默认编辑器
十、命令速查工具箱
为方便快速复制使用,特整理分类命令集,并添加详细注释说明命令用途及关键参数含义:
# 仓库操作
git init # 在当前目录初始化一个新的Git仓库,创建隐藏的.git文件夹
git init [project-name] # 创建新目录并在其中初始化Git仓库
git clone [url] # 从指定URL克隆远程仓库到本地新目录,包含完整提交历史
git clone --depth=1 [url] # 浅克隆远程仓库,仅下载最新提交,节省空间和时间
git clone --mirror [url] # 创建远程仓库的完整镜像,包含所有引用和配置,常用于备份
git remote add [名称] [远程仓库URL] # 将本地仓库与远程仓库建立联系,[名称]通常设为origin
git remote rm [名称] # 删除指定的远程仓库
git remote set-url [名称] [新URL] # 修改指定远程仓库的URL
git remote -v # 查看所有远程仓库的名称和对应的URL
git pull [远程名] [分支名] # 从远程仓库获取最新代码并合并到本地对应分支
git pull --rebase [远程名] [分支] # 拉取远程代码并通过变基合并,保持线性提交历史
git fetch [远程名] # 从远程仓库获取最新数据,但不合并到本地
git fetch --unshallow # 对浅克隆的仓库,下载全部提交历史
git push [远程名] [本地分支]:[远程分支] # 推送本地分支到远程仓库,远程分支名可省略(默认同名)
git push origin --all # 推送所有本地分支到远程仓库origin
git push --tags # 推送所有标签到远程仓库
git push --force # 强制推送,覆盖远程仓库内容,使用需谨慎
# 配置管理
git config --list # 显示当前所有Git配置
git config -e [--global] # 编辑全局(--global)或本地的Git配置文件
git config [--global] user.name "[姓名]" # 设置用户名,--global为全局配置,不加则为当前仓库配置
git config [--global] user.email "[邮箱]" # 设置用户邮箱,--global为全局配置,不加则为当前仓库配置
# 文件操作
git status # 查看工作区和暂存区的状态,显示未跟踪、已修改、已暂存的文件
git diff # 显示工作区与暂存区之间的文件差异
git diff --cached # 显示暂存区与最后一次提交之间的文件差异
git diff HEAD # 显示工作区与最新提交之间的文件差异
git add [file1] [file2] # 添加指定文件到暂存区
git add. # 添加当前目录下所有变化的文件到暂存区
git add -p # 交互式暂存,逐块选择要暂存的文件修改内容
git commit -m "提交信息" # 提交暂存区内容到本地仓库,-m参数后需填写提交说明
git commit -a -m "提交信息" # 直接提交工作区所有已跟踪文件的变更,跳过add步骤
git commit --amend -m "新信息" # 修改最后一次提交的内容或提交信息
git rm [file1] [file2] # 删除工作区文件,并将删除操作加入暂存区,同步更新版本控制
git rm --cached [file] # 停止跟踪文件,但保留文件在工作区
git mv [原路径] [新路径] # 重命名或移动文件,并记录变更到版本控制
# 提交与日志
git log # 显示当前分支的提交历史,包含详细信息
git log --oneline # 以简洁模式显示提交历史,一行一个提交
git log -p [文件] # 显示指定文件的每次提交的详细差异
git log --stat # 显示每次提交的文件变更统计(增删行数等)
git log --grep="关键词" # 搜索包含特定关键词的提交记录
git show [提交ID] # 显示某次提交的详细内容,包括代码变更和元数据
git blame [文件] # 显示文件中每行的最后修改者和提交信息
git reflog # 显示HEAD的所有历史操作记录,包括已撤销的提交
# 分支管理
git branch # 列出所有本地分支,当前分支前有星号标记
git branch -r # 列出所有远程分支
git branch -a # 列出所有本地和远程分支
git checkout [分支名] # 切换到指定的本地分支,更新工作区
git checkout -b [新分支名] # 创建新分支并切换到该分支
git switch -c [新分支名] # 等价于git checkout -b,创建并切换到新分支,语义更清晰
git switch [分支名] # 切换到已有分支,等价于git checkout [分支名]
git checkout - # 切换回上一次所在的分支
git merge [分支名] # 将指定分支合并到当前分支,可能产生Fast-forward或合并提交
git merge --squash [分支] # 合并分支时将多个提交压缩为一个
git rebase [分支名] # 将当前分支变基到目标分支,整理提交历史使其线性化
git rebase -i [提交ID] # 交互式变基,可编辑、合并、删除提交
git branch -d [分支名] # 删除指定的本地分支(需先切换到其他分支,且该分支已合并)
git branch -D [分支名] # 强制删除未合并的本地分支
git push origin --delete [远程分支名] # 删除远程仓库的指定分支,也可用git push origin :[分支名]
git remote prune origin # 清理本地无效的远程分支引用,远程已删除的分支在本地仍显示时使用
# 撤销恢复
git restore [文件] # 恢复文件到上次提交或暂存的状态,替代git checkout -- [文件]
git reset [文件] # 从暂存区移除文件,工作区内容不变
git reset --hard [提交ID] # 将HEAD、暂存区和工作区重置到指定提交,彻底回退,丢失未提交修改
git revert [提交ID] # 创建一个新提交来撤销指定提交的变更,适用于公共分支
git stash # 暂存当前工作区的修改到栈中
git stash push -m "描述" # 暂存当前修改并添加描述信息
git stash pop # 恢复最近一次暂存的修改,并从栈中删除该记录
git stash apply # 恢复暂存的修改,但保留记录在栈中
git stash list # 查看所有暂存记录
# 标签管理
git tag [标签名] # 在当前提交创建一个轻量标签
git tag -a [标签名] -m "说明" # 创建一个带说明的附注标签
git tag # 列出所有本地标签
git show [标签名] # 查看指定标签的详细信息
git push origin [标签名] # 推送单个标签到远程仓库origin
git push origin --tags # 推送所有本地标签到远程仓库origin
git tag -d [标签名] # 删除本地指定标签
git push origin :refs/tags/[标签名] # 删除远程仓库的指定标签
# 高级功能
git format-patch [提交范围] # 生成指定提交范围的补丁文件(.patch格式)
git format-patch -3 # 生成最近3个提交的补丁文件
git apply [补丁文件] # 将补丁文件应用到工作区
git am [补丁文件] # 接收方使用,应用通过邮件发送的补丁文件
git bisect start # 启动二分查找,用于定位问题提交
git bisect good [提交ID] # 标记指定提交为正常状态
git bisect bad [提交ID] # 标记指定提交为有问题状态
git bisect reset # 结束二分查找并重置到原始状态
git submodule add [URL] [路径] # 在当前项目中添加子模块
git submodule update # 更新子模块到最新版本
git submodule init # 初始化子模块,通常在首次克隆包含子模块的项目后执行
git submodule sync # 同步子模块的远程URL,更新配置
git submodule foreach "git pull" # 对所有子模块执行git pull命令,批量更新子模块
git submodule update --init --recursive # 初始化并递归更新所有子模块,用于解决子模块未更新导致的构建失败问题
git worktree add [路径] [分支] # 添加多个工作树,可同时开发多个分支
git clean -n # 预览将删除的未跟踪文件
git clean -f # 强制删除未跟踪文件
git clean -df # 强制删除未跟踪文件和目录
git cherry-pick [commit1] [commit2] # 从其他分支选择特定提交应用到当前分支
git cherry-pick -n [commit] # 应用提交但不自动创建新提交,用于合并多个提交
# 账号管理
git config --global user.name "Your Name" # 设置全局用户名
git config --global user.email "your_email@example.com" # 设置全局用户邮箱
git config user.name "Another Name" # 设置当前仓库的用户名
git config user.email "another_email@example.com" # 设置当前仓库的用户邮箱
# 修改远程仓库地址,添加账号信息,适用于多账号多仓库场景
修改远程仓库地址为https://[账号名]@github.com/[账号名]/[仓库名].git形式
git config --global credential.helper store # 记住HTTPS密码,避免每次输入
git config --global core.editor "code --wait" # 设置默认编辑器为VS Code,--wait表示等待编辑器关闭后继续操作