本文档整理了 Git 日常使用中最核心的基础指令,按「环境配置→仓库操作→文件管理→分支操作→远程交互→撤销回退」分类,附带作用说明和示例,方便快速查阅。
一、环境配置(首次安装后必做)
Git 安装后需配置用户名和邮箱,用于标识提交者身份(全球唯一,建议与远程仓库平台一致)。
指令 | 作用 | 示例 |
---|---|---|
git config --global user.name "用户名" | 配置全局用户名 | git config --global user.name "ZhangSan" |
git config --global user.email "邮箱" | 配置全局邮箱 | git config --global user.email "zhangsan@xxx.com" |
git config --list | 查看当前 Git 配置 | git config --list (可验证用户名/邮箱是否生效) |
git config user.name | 单独查看用户名 | git config user.name |
二、仓库操作(初始化/克隆)
仓库是 Git 管理代码的核心载体,分为「本地仓库」和「远程仓库」(如 GitHub/GitLab)。
1. 初始化本地仓库(从无到有创建)
在本地文件夹中初始化 Git 仓库,生成隐藏的 .git
目录(存储仓库配置和版本信息)。
# 1. 进入目标文件夹(先通过 cd 指令切换路径)
cd /Users/zhangsan/Desktop/my-project
# 2. 初始化 Git 仓库
git init
执行后,文件夹会被标记为「Git 仓库」,可开始跟踪文件。
2. 克隆远程仓库(从远程下载到本地)
将远程仓库(如 GitHub 上的项目)完整下载到本地,自动关联远程仓库地址。
# 格式:git clone 远程仓库地址(HTTPS 或 SSH 链接)
git clone https://github.com/zhangsan/my-project.git # HTTPS 链接(需输密码/Token)
git clone git@github.com:zhangsan/my-project.git # SSH 链接(需提前配置 SSH 密钥)
克隆后会自动生成与仓库名一致的文件夹,进入该文件夹即可操作。
三、文件状态管理(核心日常操作)
Git 中文件有 3 种核心状态:工作区(修改后未暂存)→暂存区(已暂存待提交)→本地仓库(已提交版本),以下指令用于状态切换。
1. 查看文件状态
git status # 查看当前仓库中所有文件的状态(未跟踪/已修改/已暂存)
# 示例输出:
# Untracked files: 未跟踪文件(红色)
# Changes to be committed: 已暂存文件(绿色)
2. 工作区 → 暂存区(git add
)
将工作区的修改(新增/修改文件)添加到「暂存区」,为提交做准备。
git add 文件名 # 添加单个文件到暂存区
git add 文件名1 文件名2 # 添加多个文件到暂存区
git add ./ # 添加当前目录下所有修改(包括子目录)
git add *.txt # 添加所有 .txt 后缀的文件(通配符)
3. 暂存区 → 本地仓库(git commit
)
将暂存区的修改提交到「本地仓库」,生成一个新的版本(每个提交有唯一的 commit-id
)。
必须写提交信息,描述本次修改的内容(方便后续回溯)。
# 基础用法:-m 后接提交信息(英文引号,简洁明了)
git commit -m "feat: 新增用户登录功能"
# 进阶:若已暂存,想修改最后一次提交(避免多一个无用提交)
git commit --amend # 会打开编辑器,修改原提交信息(仅本地未推远程时用)
4. 撤销暂存区修改(git reset HEAD
)
若误将文件加入暂存区,可撤销回「工作区」(文件修改不会丢失)。
git reset HEAD 文件名 # 撤销单个文件的暂存
git reset HEAD ./ # 撤销当前目录下所有文件的暂存
四、分支操作(Git 核心特性)
分支可理解为「平行的开发线」,用于隔离功能开发(如开发新功能、修复 Bug),避免影响主分支(如 main
/master
)。
1. 查看分支
git branch # 查看本地所有分支(当前分支前有 * 标记)
git branch -r # 查看远程所有分支
git branch -a # 查看本地+远程所有分支
2. 创建/切换分支
# 1. 创建分支(仅创建,不切换)
git branch 分支名 # 示例:git branch dev(创建 dev 分支)
# 2. 切换分支(Git 2.23+ 推荐用 switch,更直观)
git switch 分支名 # 示例:git switch dev(切换到 dev 分支)
git checkout 分支名 # 旧版切换指令(功能相同,也可用于恢复文件)
# 3. 创建并立即切换分支(常用!)
git switch -c 分支名 # 示例:git switch -c bugfix/login(创建并切换到修复登录 Bug 的分支)
git checkout -b 分支名 # 旧版指令
3. 合并分支
将指定分支的修改合并到「当前分支」(如开发完 dev
分支,合并到 main
)。
# 示例:将 dev 分支合并到 main 分支
1. 先切换到 main 分支:git switch main
2. 执行合并:git merge dev
- 若合并无冲突,直接完成;
- 若有冲突(同一文件同一处修改),需手动修改冲突文件,再执行
git add
+git commit
完成合并。
4. 删除分支
git branch -d 分支名 # 安全删除(仅删除已合并到主分支的分支,避免误删未合并代码)
git branch -D 分支名 # 强制删除(无论是否合并,慎用!)
五、远程仓库交互(与 GitHub/GitLab 同步)
本地仓库需与远程仓库同步(拉取更新、推送代码),核心指令如下。
1. 查看远程仓库关联
git remote -v # 查看当前仓库关联的所有远程仓库(显示名称和地址)
# 示例输出:
# origin git@github.com:zhangsan/my-project.git (fetch)
# origin git@github.com:zhangsan/my-project.git (push)
# (origin 是默认的远程仓库名称,可自定义)
2. 关联远程仓库(本地仓库首次关联远程)
若本地仓库是 git init
创建的,需手动关联远程仓库:
git remote add 远程仓库名 远程仓库地址
# 示例:git remote add origin git@github.com:zhangsan/my-project.git
3. 拉取远程代码(git pull
)
将远程仓库的最新代码拉取到本地,并合并到当前分支(避免推送时冲突)。
git pull 远程仓库名 分支名 # 完整写法:示例 git pull origin main
git pull # 简化写法(当前分支已关联远程分支时,默认拉取对应远程分支)
4. 推送本地代码(git push
)
将本地仓库的提交推送到远程仓库(首次推送需设置上游分支)。
# 1. 首次推送分支(设置本地分支与远程分支关联,后续可简化)
git push -u 远程仓库名 本地分支名
# 示例:git push -u origin main(将本地 main 分支推到远程 origin,同时关联)
# 2. 后续推送(已关联后,直接执行)
git push
5. 删除远程分支
git push 远程仓库名 --delete 远程分支名
# 示例:git push origin --delete dev(删除远程 origin 的 dev 分支)
六、撤销与回退(修复错误操作)
1. 撤销工作区修改(文件未暂存)
若修改了文件但未执行 git add
,想恢复到「最近一次提交/暂存」的状态(修改会丢失,谨慎!):
git checkout -- 文件名 # 示例:git checkout -- index.html(恢复 index.html 文件)
git restore 文件名 # Git 2.23+ 推荐指令(功能相同,更直观)
2. 回退本地提交(已提交到本地仓库)
若提交后发现错误,需回退到之前的版本(通过 git log
查看历史提交的 commit-id
)。
# 1. 查看提交历史(获取目标版本的 commit-id,前 7 位即可)
git log # 详细历史(按 q 退出查看)
git log --oneline # 简化历史(一行显示,含 commit-id 和提交信息)
# 示例输出:a1b2c3d (HEAD -> main) feat: 新增登录页
# 2. 回退到指定版本(--hard 表示彻底覆盖工作区和暂存区,谨慎!)
git reset --hard 目标commit-id
# 示例:git reset --hard a1b2c3d(回退到 a1b2c3d 这个版本)
# 3. 回退到上一个版本(简化写法,^ 表示上一个,^^ 表示上上个)
git reset --hard HEAD^
⚠️ 注意:git reset --hard
会删除「目标版本之后的所有修改」,若有未提交的代码,需先备份。
七、常用指令速查表
场景 | 指令 | 示例 |
---|---|---|
初始化本地仓库 | git init | cd 文件夹 && git init |
克隆远程仓库 | git clone 地址 | git clone https://xxx.git |
查看文件状态 | git status | git status |
暂存文件 | git add 文件名 | git add ./ (暂存所有) |
提交文件 | git commit -m "信息" | git commit -m "fix: 修复登录bug" |
查看分支 | git branch | git branch -a (本地+远程) |
创建并切换分支 | git switch -c 分支名 | git switch -c dev |
合并分支 | git merge 分支名 | git switch main && git merge dev |
拉取远程代码 | git pull | git pull origin main |
推送代码 | git push | 首次:git push -u origin main |
回退上一版本 | git reset --hard HEAD^ | git reset --hard HEAD^ |
八、注意事项
- 提交信息规范:建议遵循「类型: 描述」格式(如
feat: 新增功能
、fix: 修复bug
、docs: 更新文档
),方便团队协作和历史追溯。 - 分支命名规范:如
dev-功能名
、bugfix-问题描述
、release-版本号
,避免混乱。 - 推送前先拉取:每次
git push
前先执行git pull
,同步远程最新代码,减少冲突。 - 慎用
--hard
:git reset --hard
会永久删除未提交的修改,操作前确保代码已备份。