Git 是目前最主流的分布式版本控制系统,熟练掌握常用命令能够大幅提升日常开发效率。下面按典型使用流程分类,系统总结 Git 的常用命令及应用场景。
配置相关命令
-
git config-
git config --global user.name "你的名字":配置全局用户名 -
git config --global user.email "你@邮箱.com":配置全局邮箱 -
git config --list:查看当前所有配置 -
git config --global core.editor vim:设置默认编辑器 -
git config --global color.ui true:启用彩色输出
-
-
本地项目配置
-
在项目根目录使用不加
--global的git config命令,可以为该仓库单独设置配置。
-
仓库初始化与克隆
-
git init
在当前目录初始化一个新的 Git 仓库(创建.git目录)。 -
git clone <远程仓库地址>
将远程仓库完整地克隆到本地,包含历史提交记录。 -
git clone --depth 1 <url>
只克隆最近的一次提交,适用于只需要最新代码的场景。
查看状态与差异
-
git status
显示当前工作区与暂存区状态,比如哪些文件被修改、哪些文件未被跟踪。 -
git status -s或git status --short
使用简洁格式显示状态。 -
git diff
查看工作区与暂存区的差异(未暂存的更改)。 -
git diff --cached或git diff --staged
查看已暂存但尚未提交的变更。 -
git diff HEAD
显示工作区或暂存区与最近一次提交(HEAD)的差异。
添加、提交与撤销
-
git add <文件>
将指定文件修改加入暂存区。 -
git add .或git add -A
将所有已修改或新增的文件加入暂存区。 -
git commit -m "提交信息"
将暂存区内容提交为一个快照,并附加说明。 -
git commit --amend
修改最近一次提交的提交信息或合并新的暂存更改到最后一次提交。 -
撤销操作
-
git reset HEAD <文件>:取消暂存(从暂存区移出该文件) -
git checkout -- <文件>:丢弃工作区未暂存的修改(恢复到上次提交状态) -
git reset --hard HEAD:丢弃所有未提交更改(取消暂存 + 工作区恢复) -
git revert <commit>:为指定提交生成一个新的“反向提交”,用于安全的撤销历史提交
-
日志与历史浏览
-
git log
显示提交历史(默认格式)。 -
git log --oneline
以压缩格式显示每条提交(只显示提交 ID 与简短信息)。 -
git log -p
显示每次提交所引入的差异内容。 -
git log --author="用户名"
仅显示某个作者的提交记录。 -
git log <分支1>..<分支2>
显示两个分支之间的差异提交。 -
git blame <文件>
逐行显示某个文件最新的一次提交记录(谁、哪次提交修改了这一行)。
分支与合并管理
-
git branch
列出本地所有分支。 -
git branch -r
列出远程分支。 -
git branch -a
列出本地与远程所有分支。 -
git branch <分支名>
新建一个本地分支(不切换)。 -
git checkout <分支>
切换到指定分支。 -
git checkout -b <分支名>
创建并切换到新分支。 -
git merge <分支>
将指定分支合并到当前分支。 -
git branch -d <分支>
删除本地分支(前提是已被合并或无未合并提交)。 -
git branch -D <分支>
强制删除本地分支。 -
git cherry-pick <commit>
将某个提交引入到当前分支(在不同分支间拣选提交)。 -
git rebase <目标分支>
对当前分支做变基,重写提交历史。 -
远程分支操作
-
git push origin <分支>:将本地分支推送到远程 -
git push -u origin <分支>:推送并设置远程跟踪关系 -
git push origin --delete <分支>:删除远程分支 -
git fetch:从远程获取最新提交,不合并 -
git pull:相当于git fetch+git merge,拉取并合并
-
标签与版本标注
-
git tag
列出本地所有标签。 -
git tag <标签名>
在当前提交打一个轻量标签。 -
git tag -a <标签名> -m "说明"
给当前提交打一个带注释的标签(Annotated Tag)。 -
git tag <标签名> <commit>
给指定提交打标签。 -
git push origin <标签名>
推送某个标签到远程。 -
git push origin --tags
推送所有本地标签到远程。 -
删除标签
-
git tag -d <标签名>:删除本地标签 -
git push origin :refs/tags/<标签名>:删除远程标签
-
暂存(stash)机制
-
git stash push
将当前工作区和暂存区的更改暂存起来,恢复干净工作区。 -
git stash list
列出所有 stash 条目。 -
git stash apply [stash@{n}]
应用指定条目的暂存改动到当前工作区(但保留 stash 记录)。 -
git stash pop
应用最近一个暂存改动并从 stash 列表中移除它。 -
git stash drop [stash@{n}]
删除指定的 stash 条目。 -
git stash clear
清空所有 stash 条目。
清理与辅助命令
-
git clean -f
删除工作目录中未跟踪的文件(小心使用)。 -
git clean -fd
删除未跟踪的文件与目录。 -
git rm <文件>
从仓库和文件系统中删除文件,并提交变更。 -
git rm --cached <文件>
仅从 Git 索引(暂存区)中移除文件,而保留本地文件。 -
git mv <旧名> <新名>
重命名或移动文件(在 Git 控制下)。 -
git stash(简写)
等同于git stash push。 -
git reflog
查看 HEAD 或分支的变更记录(包括被重写/回退的历史)。 -
git reset <commit>
将当前 HEAD、暂存区指向指定提交,但保留工作区改动(软重置)。 -
git reset --hard <commit>
将 HEAD、暂存区和工作区都重置为指定提交,丢弃所有后续改动。 -
git bisect start/git bisect bad/git bisect good
使用二分法查找导致 bug 的提交。 -
git archive
以压缩包方式导出某个分支或提交的源代码快照。 -
git gc
对本地仓库进行垃圾回收和资源整理。
别名与效率提升
-
git config --global alias.st status
为git status定义别名git st。 -
定义更多别名(如
co = checkout、ci = commit)可以大大节省键入操作。 -
在
.gitconfig中配置彩色输出、补全等特性也能提升日常操作体验。
使用技巧与注意事项
-
在执行破坏性操作(如
reset --hard、clean -f)之前,建议确认无未备份改动或暂存更改。 -
对于多人协作的分支,避免在公共分支上使用变基(
rebase)等会重写历史的操作。 -
常用
git log --oneline --graph或git log --graph --all来以图形方式查看分支与合并历史。 -
对大型仓库或文件多的项目,可使用浅克隆(
--depth参数)或部分检出策略。 -
合并时如遇冲突,要逐文件检查冲突标记(
<<<<<<<、=======、>>>>>>>),务必在确认无误后再提交。 -
经常清理无用分支、标签和垃圾对象,可以保持仓库整洁。
掌握以上这些 Git 常用命令,能够覆盖日常开发绝大多数场景。从项目初始化、代码提交、分支管理、合并冲突、撤销历史,到标签、stash、清理等操作,逐步练习与积累,你会越来越得心应手。