Git命令详解与使用指南
Git 是一个分布式版本控制系统,是软件开发中不可或缺的工具。下面我将从基础到高级,详细讲解最常用和最重要的 Git 命令。
核心概念理解
在开始命令之前,先理解四个关键区域,你的文件就存在于这些区域中:
- 工作目录 (Working Directory):你正在编辑的本地文件。
- 暂存区 (Staging Area / Index):一个中间区域,存放你准备提交的文件变更。
- 本地仓库 (Local Repository):存储所有提交历史的地方,位于
.git
目录。 - 远程仓库 (Remote Repository):托管在服务器(如 GitHub, GitLab)上的共享仓库。
文件的状态变化流程:工作目录
--(git add
)--> 暂存区
--(git commit
)--> 本地仓库
--(git push
)--> 远程仓库
。
一、配置与初始化
这些命令通常只需设置一次。
| 设置全局用户名 |
|
| 设置全局邮箱 |
|
| 查看所有配置 |
|
| 将当前目录初始化为一个新的 Git 仓库 |
|
| 克隆(下载)一个远程仓库到本地 |
|
二、基础工作流命令
这是你最日常使用的命令。
| 查看工作目录和暂存区的状态 (哪些文件被修改了、哪些已暂存)。这是最常用的命令之一。 |
|
| 将工作目录中的 文件变更添加到暂存区 。 |
(添加特定文件) |
| 添加当前目录下的 所有变更 到暂存区。 |
|
| 添加仓库中的所有变更(包括新文件、修改的文件和删除的文件)。 |
|
| 将暂存区的内容提交到本地仓库 ,并附上提交信息。 |
|
| 跳过
步骤,直接提交所有 已跟踪文件 的修改( 不包括新文件 )。 |
|
| 将本地仓库的提交 推送到远程仓库 。 |
|
| 从远程仓库拉取更新并合并到当前分支 (=
+
)。 |
|
三、查看与比较历史
| 查看提交历史。 |
|
| 以简洁的单行模式查看历史。 |
|
| 以图形化方式查看分支合并历史。 |
|
| 比较工作目录和暂存区的差异 。 |
|
| 比较暂存区和最后一次提交的差异 。 |
|
| 比较两次提交之间的差异。 |
|
| 显示某次提交的具体内容变更。 |
|
四、分支管理
分支是 Git 的超级功能。
| 列出所有本地分支。当前分支前有
号。 |
|
| 列出所有本地和远程分支。 |
|
| 创建一个新分支 。 |
|
| 切换到指定分支 。 |
|
| (Git 2.23+) 切换到指定分支 ,比
更语义化。 |
|
| 创建并立即切换到新分支 (经典组合技)。 |
|
| (Git 2.23+) 创建并立即切换到新分支 。 |
|
| 将指定分支合并到当前分支 。 |
|
| 删除一个已合并的分支 (安全删除)。 |
|
| 强制删除一个分支 (即使它未合并)。 |
|
五、撤销与回退
谨慎使用! 理解后再操作。
| 丢弃工作目录中文件的修改 ,恢复到最后一次提交的状态。 | 改乱了文件,想重新开始。 |
| 将文件从暂存区撤出 ,但保留工作目录的修改。 |
了不该add的文件。 |
| 修改最后一次提交 (可以修改信息或加入漏掉的文件)。 | 提交信息写错了,或漏了文件。 |
| 回退到某个提交, 保留工作目录和暂存区的内容 。 | 将多次提交合并成一次。 |
| (默认) 回退到某个提交, 保留工作目录的修改,但清空暂存区 。 | 想撤销提交和
,但保留代码修改。 |
| 彻底回退到某个提交 ,丢弃所有工作目录和暂存区的修改。 非常危险! | 想彻底抛弃最近的所有代码。 |
| 创建一个新的提交来撤销某次提交的更改 。这是 安全 的撤销方式,因为它不重写历史。 | 要撤销一个已推送到远程仓库的提交。 |
reset
vsrevert
重要区别:
reset
是移动HEAD
指针,会改变历史,只适合在本地分支操作。revert
是新增一个提交,不会改变原有历史,适合撤销已公开的提交。
六、远程仓库协作
| 查看已配置的远程仓库地址。 |
|
| 添加一个新的远程仓库。 |
|
| 从远程仓库下载所有更新 ,但 不自动合并 到当前分支。 |
|
| 首次推送分支时,使用
建立追踪,之后可以直接
。 |
|
或
| 强制推送 。 非常危险! 会覆盖远程历史,仅在绝对必要时使用。 |
|
七、高级实用命令
| 将当前工作目录和暂存区的修改临时储藏起来 。 | 急需修复bug,但当前代码没写完。 |
| 恢复最近储藏的修改并删除储藏记录。 |
|
| 查看所有储藏列表。 |
|
| 不是一个命令,而是一个文件 。在其中写入文件名或模式,Git 会自动忽略这些文件。 | 忽略
,
文件等。 |
总结与最佳实践
- 勤提交:提交粒度要小,每次提交只做一件事,写清晰的提交信息。
- 多分支:为新功能、修复bug创建独立的分支,保持主分支(如
main
)的稳定。 - 先拉再推:在
push
之前,先pull
一下远程的最新代码,避免冲突。 - 慎用强制推送:除非你百分之百确定,否则不要使用
git push --force
。 - 善用
.gitignore
:一开始就设置好,避免提交无关文件(如日志、依赖包、系统文件)。