Git速查手册


Git与版本控制

版本控制

什么是版本控制?

版本控制(Version Control)是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。它可以帮助我们:

  • 追踪文件的修改历史,查看谁在何时做了什么更改
  • 恢复到之前的版本,当出现错误时可以快速回滚
  • 多人协作时管理代码,避免文件冲突和覆盖
  • 并行开发不同功能,最后再合并到一起

简单来说,版本控制就像给你的项目创建了一系列"快照",你可以随时回到过去的任何一个状态。

版本控制系统的类型

1.本地版本控制系统

  • 在本地磁盘上保存文件的不同版本
  • 例如:RCS(通过补丁集记录文件差异)

2.集中式版本控制系统

  • 所有版本数据存储在中央服务器
  • 开发者从中央服务器拉取代码,完成后再推回
  • 例如:SVN、CVS
  • 缺点:中央服务器故障时无法协作,数据有丢失风险

3.分布式版本控制系统

  • 每个开发者的本地都有完整的版本库副本
  • 无需联网即可提交、查看历史
  • 拥有更强的分支管理能力
  • 例如:Git、Mercurial、Bazaar
  • 优势:容错性高,协作灵活,支持离线工作

什么是Git?

git Git是目前最流行的分布式版本控制系统,由Linux内核开发者Linus Torvalds于2005年创建。它的设计目标是:

  • 速度快
  • 支持非线性开发(强大的分支能力)
  • 完全分布式
  • 能高效处理大型项目(如Linux内核)

Git与其他版本控制系统的主要区别在于:它对待数据的方式更像是一个"快照流",而不是文件变化的列表。每次提交,Git都会对当时的全部文件创建一个快照并保存引用,而不是只记录差异。

Git的核心概念

image-20250901082948155

1.工作区(Working Directory)

  • 你当前正在编辑的文件目录
  • 这些文件可能处于未跟踪或已修改状态

2.暂存区(Staging Area)

  • 一个文件(通常位于.git/index),用于临时保存你打算提交的修改
  • 可以理解为待提交内容的缓冲区

3.本地仓库(Local Repository)

  • 存储所有版本历史的数据库
  • 位于工作区的.git目录中
  • 包含所有提交记录、分支信息等

4.远程仓库(Remote Repository)

  • 托管在网络上的仓库(如GitHub、GitLab)
  • 用于多人协作时同步代码

5.提交(Commit)

  • 对工作区修改的一次永久记录
  • 每个提交都有一个唯一的哈希值作为标识

6.分支(Branch)

  • 指向某个提交的指针
  • 默认分支通常名为main或master
  • 可以创建多个分支并行开发不同功能

Git的工作流程

1.修改文件:在工作区编辑文件

2.暂存修改:将需要提交的修改添加到暂存区(git add

3.提交修改:将暂存区的内容提交到本地仓库(git commit

4.同步远程:将本地仓库的修改推送到远程仓库(git push),或从远程拉取他人的修改(git pull

为什么选择Git?

1.性能卓越:Git的所有操作几乎都是本地执行,速度极快

2.强大的分支管理:创建和合并分支非常高效,支持复杂的工作流

3.分布式架构:每个开发者都有完整副本,不怕数据丢失

4.广泛采用:几乎成为行业标准,大量开源项目和企业使用

5.丰富的生态:有GitHub、GitLab等平台提供托管服务,以及众多工具支持

常见的Git工作流

1.集中式工作流:类似SVN,所有人在同一个分支上工作

2.功能分支工作流:每个功能在单独分支开发,完成后合并到主分支

3.GitFlow工作流:有严格的分支模型,区分功能开发、发布准备和bug修复

4.Forking工作流:适合开源项目,通过Fork和Pull Request协作

无论选择哪种工作流,Git的核心功能和概念都是一致的,掌握了基础操作后可以灵活应用于各种场景。

Git的学习曲线虽然有些陡峭,但一旦掌握,将极大提升开发效率和代码管理能力,是现代软件开发不可或缺的工具。

Git 常用命令速查手册

本手册按 基础配置、仓库操作、分支管理、提交与撤销、远程协作、高级操作 ,整理了日常开发中最常用的 Git 命令,方便快速查阅。

一、基础配置(首次使用必做)

Git 首次安装后需配置用户信息(关联提交记录),可通过 --global 配置全局(所有仓库生效),或不加该参数配置当前仓库。

命令 说明
git config --global user.name "用户名" 配置全局用户名(与 GitHub/GitLab 账号一致)
git config --global user.email "邮箱" 配置全局邮箱(与远程仓库账号绑定)
git config --list 查看当前 Git 配置(全局+当前仓库)
git config user.name 查看当前生效的用户名
git config --global core.editor "编辑器" 配置默认提交编辑器(如 VS Code)

基础配置命令详解:

1.配置全局用户名

git config --global user.name "ZhangSan":该命令会在用户目录的 .gitconfig 文件中添加用户名配置,所有本地 Git 仓库都会使用这个用户名关联提交记录。建议与 GitHub/GitLab 账号保持一致,便于团队识别提交者。

2.配置全局邮箱

git config --global user.email "zhangsan@xxx.com":与用户名配套使用,用于标识提交者身份。远程仓库(如 GitHub)会通过该邮箱关联账号,若邮箱未在远程仓库注册,提交记录可能不会显示为你的账号头像。

3.查看所有配置

git config --list:执行后会列出所有生效的配置项,包括全局配置(--global)和当前仓库的局部配置(无 --global)。例如:

user.name=ZhangSan
user.email=zhangsan@xxx.com
core.editor=code --wait

4.查看当前用户名

git config user.name:单独查看当前生效的用户名,输出结果如 ZhangSan。若同时存在全局和局部配置,局部配置会覆盖全局配置。

5.配置默认编辑器

git config --global core.editor "code --wait":当执行 git commit 未加 -m 参数时,Git 会自动打开编辑器让你填写提交信息。配置 VS Code 时需加 --wait,确保 Git 等待编辑器关闭后再继续操作。

二、仓库操作(初始化/克隆/查看状态)

包括本地仓库初始化、从远程克隆仓库,以及查看仓库文件状态。

1. 初始化与克隆

命令 说明
git init 在当前目录初始化本地 Git 仓库(生成 .git 隐藏目录)
git clone <远程仓库地址> 从远程仓库克隆到本地(自动创建仓库目录)
git clone <远程地址> <自定义目录名> 克隆时指定本地目录名

初始化与克隆命令详解:

1.初始化本地仓库

git init:进入项目文件夹后执行该命令,会在当前目录生成一个隐藏的 .git 文件夹,用于存储仓库的版本信息、分支数据等核心文件。例如:

cd /home/zhangsan/my-project  # 进入项目目录
git init                       # 初始化仓库

执行后,目录下会新增 .git 文件夹(需开启“显示隐藏文件”才能看到)。

2.克隆远程仓库

git clone https://github.com/xxx/xxx.git:从远程仓库完整复制代码到本地,包括所有分支、提交历史和文件。例如克隆一个名为 vue 的仓库:

git clone https://github.com/vuejs/vue.git

执行后会在当前目录创建 vue 文件夹,内含完整代码和 Git 仓库信息。

3.克隆并指定目录名

git clone <远程地址> <自定义目录名>:当默认仓库名不符合需求时使用,例如将远程仓库克隆到 my-vue-project 目录:

git clone https://github.com/vuejs/vue.git my-vue-project

执行后代码会存储在 my-vue-project 文件夹中,而非默认的 vue 文件夹。

2. 查看仓库状态

命令 说明
git status 查看当前工作区/暂存区文件状态
git log 查看提交历史(详细格式)
git log --oneline 简化提交历史(仅哈希前7位+提交信息)
git log --graph 以图形化显示分支合并历史

查看仓库状态命令详解:

1.查看文件状态

git status:显示工作区(未暂存)和暂存区(已 git add)的文件状态,例如:

   未跟踪的文件:
     (使用 "git add <文件>..." 以包含要提交的内容)
           new-file.js

   修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
           modified:   src/index.js
  • 红色文字:未暂存的修改或未跟踪的文件
  • 绿色文字:已暂存(git add 后)的文件

2.查看提交历史(详细)

git log:按时间倒序显示所有提交,包括提交哈希(长字符串)、作者、邮箱、提交时间、提交信息,例如:

   commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
   Author: ZhangSan <zhangsan@xxx.com>
   Date:   Mon Aug 26 10:00:00 2024 +0800

       feat: 新增用户登录功能

q 键可退出查看。

3.简化版提交历史

git log --oneline:每一行显示一个提交,仅包含提交哈希前7位和提交信息,适合快速浏览历史:

a1b2c3d (HEAD -> main) feat: 新增用户登录功能
e4f5g6h fix: 修复首页加载缓慢问题
i7j8k9l docs: 更新 README.md 文档

4.图形化分支历史

git log --graph --oneline:结合 --graph--oneline,用符号图形化展示分支合并关系:

*   a1b2c3d (HEAD -> main) merge: 合并登录功能分支
|\
| * e4f5g6h (feature/login) feat: 完善登录验证
| * i7j8k9l feat: 实现登录表单
* | o0p1q2r fix: 修复导航栏样式
|/
* s3t4u5v init: 初始化项目

图形中 * 代表提交,|/ 代表分支流向,直观展示分支创建和合并过程。

三、分支管理(核心操作)

Git 分支是并行开发的核心,常用命令包括创建、切换、合并、删除分支等。

命令 说明
git branch 查看本地所有分支(* 标记当前分支)
git branch -r 查看远程所有分支
git branch -a 查看本地+远程所有分支
git branch <分支名> 创建新分支(基于当前分支)
git checkout <分支名> 切换到指定分支
git checkout -b <分支名> 创建并立即切换到新分支
git merge <分支名> 将指定分支合并到当前分支
git branch -d <分支名> 删除已合并的本地分支
git branch -D <分支名> 强制删除未合并的本地分支
git push origin --delete <分支名> 删除远程分支

分支管理命令详解:

1.查看本地分支

git branch:列出所有本地分支,当前所在分支前会显示 * 符号:

   * main
     feature/login
     bugfix/001

2.查看远程分支

git branch -r:列出远程仓库的所有分支(格式为 origin/分支名):

origin/main
origin/feature/login
origin/release/v1.0

3.查看所有分支(本地+远程)

git branch -a:同时显示本地和远程分支,远程分支以 remotes/origin/ 为前缀:

   * main
     feature/login
     remotes/origin/main
     remotes/origin/feature/login

4.创建新分支

git branch feature/payment:基于当前所在分支(如 main)创建新分支 feature/payment,新分支的代码与当前分支完全一致。创建后仍在原分支,需用 git checkout 切换。

5.切换分支

git checkout feature/payment:切换到 feature/payment 分支,工作区的文件会自动更新为该分支的最新内容。切换前需确保当前分支的修改已提交或暂存,否则可能导致文件冲突。

6.创建并切换分支(快捷方式)

git checkout -b bugfix/login-error:等同于 git branch bugfix/login-error + git checkout bugfix/login-error,一步完成分支创建和切换,开发新功能或修复 bug 时常用。

7.合并分支

例如将 feature/login 合并到 main 分支:

git checkout main       # 先切换到目标分支(main)
git pull                # 拉取远程最新代码,避免冲突
git merge feature/login # 合并 feature/login 到 main

若合并时出现冲突(同一文件同一位置被修改),需手动解决冲突后再提交。

8.删除本地分支(安全模式)

git branch -d feature/login:仅能删除已合并到当前分支的分支,若分支未合并,会提示错误:error: 分支 'feature/login' 未完全合并,防止误删未合并的代码。

9.强制删除本地分支

git branch -D feature/old:无视分支是否合并,强制删除。用于确认废弃的分支(如开发到一半的功能被取消),执行前需确保分支内容无需保留。

10.删除远程分支

git push origin --delete feature/login:删除远程仓库的 feature/login 分支,执行后需通知团队其他成员执行 git fetch --prune 更新本地远程分支缓存,避免看到已删除的远程分支。

四、提交与撤销(代码暂存/提交/回滚)

代码从“工作区”到“暂存区”再到“本地仓库”的流程,以及错误操作后的撤销方法。

1. 暂存与提交

命令 说明
git add <文件名> 将指定文件从工作区添加到暂存区
git add . 将当前目录所有修改/新增文件添加到暂存区
git add -p 交互式暂存(按块选择文件内容)
git commit -m "提交信息" 将暂存区内容提交到本地仓库
git commit -am "提交信息" 跳过暂存区,直接提交已跟踪文件的修改
git commit --amend 补充提交(合并到上一次提交,修改提交信息)

暂存与提交命令详解:

1.暂存指定文件

git add src/login.js:将 src/login.js 从工作区(修改后未暂存的状态)添加到暂存区,后续提交会包含该文件的当前修改。适合仅提交部分文件的场景。

2.暂存所有变更

git add .:递归添加当前目录下所有“已修改、新增”的文件到暂存区(不包含被删除的文件)。例如新增 utils.js、修改 index.js 后,执行该命令会同时暂存这两个文件。

3.交互式暂存

git add -p src/utils.js:按“代码块”选择文件内容进行暂存,适合只提交文件中部分修改的场景(如同一文件修改了两个功能,只想提交其中一个)。执行后会逐块显示修改内容,按提示操作:

  • y:暂存当前块
  • n:跳过当前块
  • q:退出交互

4.提交暂存区内容

git commit -m "feat: 实现用户登录表单验证":将暂存区的所有文件提交到本地仓库,-m 后为提交信息。建议遵循“语义化提交规范”,用 feat(新功能)、fix(修复)、docs(文档)等前缀说明修改类型。

5.直接提交已跟踪文件

git commit -am "fix: 修复登录按钮点击无响应":跳过暂存区,直接提交“已跟踪文件”(曾通过 git add 加入版本控制的文件)的修改。不支持新增的未跟踪文件(需先用 git add 跟踪)。

6.补充提交 若上一次提交遗漏了文件或需修改提交信息:

git add 遗漏的文件.js       # 先暂存遗漏的文件
git commit --amend        # 合并到上一次提交

执行后会打开编辑器,可修改原提交信息,最终将两次修改合并为一次提交(仅适合未推送到远程的提交,避免修改已共享的历史)。

2. 撤销操作

命令 说明
git restore <文件名> 撤销工作区修改(未暂存的文件)
git restore --staged <文件名> 将暂存区文件撤回工作区
git reset --soft <提交哈希> 回滚到指定提交(保留暂存区和工作区)
git reset --mixed <提交哈希> 回滚到指定提交(清空暂存区,保留工作区)
git reset --hard <提交哈希> 强制回滚(清空暂存区+删除工作区修改)
git revert <提交哈希> 生成撤销提交(保留原历史,适合已推送的代码)

撤销操作命令详解:

1.撤销工作区修改

git restore src/login.js:适用于:修改了文件但未执行 git add,想放弃修改,恢复到文件上一次提交或暂存的状态。修改会丢失,执行前确保无需保留。

2.取消暂存

git restore --staged src/login.js:适用于:执行 git add 后发现文件有错误,想取消暂存但保留修改。执行后文件从暂存区回到工作区,可重新修改后再 git add

3.软回滚(保留变更)

git reset --soft HEAD~1

  • HEAD~1 表示上一次提交(HEAD~2 表示上上次,也可直接用提交哈希)
  • 效果:本地仓库回滚到指定提交,暂存区和工作区的修改完全保留(适合合并多次连续提交) 示例:最近两次提交可合并为一次,执行后最近一次提交的内容会回到暂存区,重新 git commit 即可合并。

4.混合回滚(默认模式)

git reset --mixed HEAD~1

  • 效果:本地仓库回滚到指定提交,暂存区清空,工作区修改保留(适合“提交后发现代码需调整,想重新提交”)
  • 示例:提交后发现代码有小问题,执行后可直接修改工作区文件,重新 git addgit commit

5.强制回滚(危险操作)

git reset --hard a1b2c3d

  • 效果:本地仓库回滚到指定提交(a1b2c3d 为目标提交哈希),暂存区和工作区的所有修改永久删除
  • 适用场景:提交了错误代码(如包含密码、病毒文件),需彻底清除
  • 警告:执行前务必确认修改无需保留,且该提交未推送到远程(否则会影响团队协作)。

6.生成撤销提交(安全回滚)

git revert a1b2c3d

  • 适用于:已推送到远程的错误提交,需撤销但保留原历史(避免修改共享的提交记录)
  • 效果:创建一个新提交,内容为“抵消 a1b2c3d 提交的修改”,原提交仍保留在历史中
  • 操作:执行后会打开编辑器填写撤销原因,提交后远程仓库会新增一个撤销提交,团队成员拉取后即可同步修改。

五、远程协作(与远程仓库交互)

团队协作中,需与 GitHub/GitLab 等远程仓库同步代码(拉取/推送/关联)。

命令 说明
git remote 查看已关联的远程仓库列表
git remote -v 查看远程仓库的详细地址
git remote add <远程名> <远程地址> 关联远程仓库
git pull 拉取远程分支代码并合并到本地当前分支
git pull <远程名> <远程分支>:<本地分支> 拉取指定远程分支到本地指定分支
git push 推送本地当前分支到远程对应分支(首次需 -u 绑定)
git push <远程名> <本地分支>:<远程分支> 推送本地分支到远程指定分支
git fetch 拉取远程仓库信息(不合并,仅更新本地跟踪分支)
git remote set-url <远程名> <新地址> 修改远程仓库地址

远程协作命令详解:

1.查看远程仓库名称

git remote:列出本地已关联的远程仓库名称,默认克隆的仓库名通常为 origin

origin
upstream  # 若关联了上游仓库(如 Fork 项目后)

2.查看远程仓库地址

git remote -v:显示每个远程仓库的拉取(fetch)和推送(push)地址:

origin  https://github.com/your-name/your-repo.git (fetch)
origin  https://github.com/your-name/your-repo.git (push)
upstream  https://github.com/original-owner/original-repo.git (fetch)
upstream  https://github.com/original-owner/original-repo.git (push)

3.关联远程仓库

本地新建仓库后,需关联远程仓库才能推送代码:

git remote add origin https://github.com/your-name/new-repo.git

其中 origin 是远程仓库的别名(可自定义,通常用 origin),后续推送/拉取时直接使用别名即可。

4.拉取远程代码(默认分支)

git pull:拉取远程仓库中与本地当前分支对应的分支(如本地 main 对应远程 origin/main),并自动合并到本地分支。相当于 git fetch + git merge,拉取前建议提交本地修改,避免冲突。

5.拉取指定远程分支

git pull origin dev:local-dev:拉取远程 origin/dev 分支的代码,合并到本地 local-dev 分支(本地分支不存在时会自动创建)。适用于同步远程非对应分支的场景。

6.推送本地分支到远程

  • 首次推送:需绑定“上游分支”(远程分支与本地分支关联)
git push -u origin feature/payment  # 推送本地 feature/payment 到远程 origin/feature/payment
  • 后续推送:绑定后直接执行 git push 即可,无需重复指定远程和分支。

7.推送本地分支到远程指定分支

git push origin local-test:remote-test:将本地 local-test 分支的代码推送到远程 remote-test 分支(远程分支不存在时会自动创建),适用于本地与远程分支名不同的场景。

8.拉取远程信息(不合并)

git fetch origin:拉取远程仓库的所有分支信息到本地(更新本地的远程跟踪分支,如 origin/main),但不合并到本地分支。适合先查看远程最新代码,再决定是否合并:

git fetch origin          # 拉取远程信息
git checkout origin/main  # 查看远程 main 分支的最新代码
git merge origin/main     # 手动合并到本地 main 分支(如需)

9.修改远程仓库地址 当远程仓库迁移(如从 GitHub 迁移到 GitLab)时,需更新地址:

git remote set-url origin https://new-url.git

执行后可用 git remote -v 验证地址是否更新。

六、高级操作(忽略文件/冲突解决/标签)

解决日常开发中的特殊场景,如忽略不必要文件、合并冲突、打版本标签等。

1. 忽略文件(.gitignore)

创建 .gitignore 文件,指定 Git 需忽略的文件/目录(如日志、依赖、IDE 配置),避免提交无关内容。

示例 .gitignore 内容:

# 忽略 node_modules 依赖目录(npm/yarn 安装的依赖)
node_modules/

# 忽略日志文件
logs/
*.log

# 忽略 VS Code 配置
.vscode/
*.code-workspace

# 忽略环境变量文件(含敏感信息)
.env
.env.local

# 忽略操作系统自动生成的文件
.DS_Store       # macOS
Thumbs.db       # Windows

使用方法:

  1. 在仓库根目录创建 .gitignore 文件:touch .gitignore(Windows 可手动创建)
  2. 按上述格式添加需忽略的文件/目录
  3. .gitignore 本身提交到仓库:git add .gitignore && git commit -m "chore: 添加 .gitignore"

2. 冲突解决

合并分支或拉取代码时,若同一文件同一位置被不同修改,会产生冲突,需手动解决:

冲突解决步骤:

1.冲突提示:合并时终端会提示 Automatic merge failed; fix conflicts and then commit the result.

2.查看冲突文件:冲突文件中会标记冲突内容:

<<<<<<< HEAD当前分支内容
let welcomeMsg = "Hello from main";
=======冲突分割线
let welcomeMsg = "Hello from feature";
>>>>>>> feature/login待合并分支内容

3.手动编辑:删除冲突标记(<<<<<<<=======>>>>>>>),保留正确内容(可结合两边修改):

let welcomeMsg = "Hello from merged code";  // 保留正确逻辑

4.标记为已解决git add <冲突文件>(将解决后的文件加入暂存区)

5.完成合并git commit(无需 -m,Git 会自动生成冲突解决的提交信息)

3. 标签(版本标记)

用于标记重要版本(如发布版本 v1.0.0),方便后续回溯。

命令 说明
git tag 查看所有本地标签
git tag -a <标签名> -m "标签说明" 创建带注释的标签(推荐)
git tag <标签名> 创建轻量标签(仅存哈希,无注释)
git push origin <标签名> 推送指定标签到远程
git push origin --tags 推送所有本地标签到远程
git tag -d <标签名> 删除本地标签
git push origin --delete <标签名> 删除远程标签

标签命令详解:

1.创建带注释的标签(推荐)

git tag -a v1.0.0 -m "第一个正式发布版本,支持登录、支付功能" :带注释的标签包含标签名、创建者、时间、说明,适合正式版本标记,便于后续查看标签含义。

2.推送标签到远程

  • 推送单个标签:git push origin v1.0.0
  • 推送所有标签:git push origin --tags(批量推送本地所有未推送的标签)

3.基于历史提交打标签 若需为过去的提交打标签,先通过 git log --oneline 找到目标提交哈希,再执行:

git tag -a v0.9.0 a1b2c3d -m "修复上线前的最后一个bug"

其中 a1b2c3d 是历史提交的哈希。

4.删除标签

  • 删除本地标签:git tag -d v0.9.0
  • 删除远程标签:git push origin --delete v0.9.0

附:常用场景命令组合

1.新功能开发完整流程

# 1. 切换到主分支并拉取最新代码
git checkout main
git pull

# 2. 创建并切换到功能分支
git checkout -b feature/user-profile

# 3. 开发代码(修改/新增文件)...

# 4. 提交代码到本地仓库
git add .
git commit -m "feat: 实现用户资料页编辑功能"

# 5. 推送分支到远程(首次需 -u 绑定)
git push -u origin feature/user-profile

2.修复线上紧急 bug 流程

# 1. 切换到主分支并拉取最新代码
git checkout main
git pull

# 2. 创建 bug 修复分支
git checkout -b bugfix/critical-error

# 3. 修复代码...

# 4. 提交修复
git add .
git commit -m "fix: 修复支付接口超时导致的订单异常"

# 5. 推送分支并申请合并到主分支
git push -u origin bugfix/critical-error

3.版本发布流程

# 1. 确保主分支代码最新且稳定
git checkout main
git pull

# 2. 打版本标签
git tag -a v1.2.0 -m "v1.2.0 发布:新增用户资料页,修复支付bug"

# 3. 推送标签到远程(触发发布流程)
git push origin v1.2.0

七、Git 别名配置(提高效率)

为常用命令设置别名,减少输入量,提升操作效率。通过 git config 配置后,可使用简称代替完整命令。

命令 说明 示例效果
git config --global alias.st status git st 代替 git status git st 等价于 git status
git config --global alias.co checkout git co 代替 git checkout git co main 等价于 git checkout main
git config --global alias.br branch git br 代替 git branch git br 等价于 git branch
git config --global alias.cm "commit -m" git cm 代替 git commit -m git cm "fix: xxx" 等价于 git commit -m "fix: xxx"
git config --global alias.unstage "restore --staged" git unstage 取消暂存 git unstage file.js 等价于 git restore --staged file.js
git config --global alias.last "log -1 HEAD" git last 查看最后一次提交 git last 等价于 git log -1 HEAD

配置示例:

# 一次性配置常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm "commit -m"
git config --global alias.unstage "restore --staged"

配置后,日常操作可简化为:

git st          # 查看状态
git co -b dev   # 创建并切换分支
git br          # 查看分支
git cm "feat: xxx"  # 提交代码

八、其他实用命令

处理特殊场景的辅助命令,如清理工作区、查看差异、暂存工作区等。

命令 说明 示例
git clean -fd 清理工作区的未跟踪文件和目录(-f 删文件,-d 删目录) 执行 git clean -fd 会删除所有未 git add 的新增文件和文件夹(谨慎使用)
git diff 查看工作区与暂存区的差异(未暂存的修改内容) git diff 显示所有未暂存的修改,git diff file.js 仅显示指定文件的修改
git diff --staged 查看暂存区与本地仓库的差异(已暂存但未提交的内容) 执行 git diff --staged 可确认 git add 后的内容是否正确
git stash 暂存当前工作区的修改(未提交的内容),用于临时切换分支 开发到一半需切换分支,执行 git stash 暂存修改,切换回来后用 git stash pop 恢复
git stash pop 恢复最近一次 git stash 暂存的内容,并删除暂存记录 git stash pop 会将暂存的修改恢复到工作区
git stash list 查看所有暂存的记录 执行后显示 stash@{0}: WIP on feature/login: a1b2c3d ... 等暂存列表
git cherry-pick <提交哈希> 将指定提交复制到当前分支(适用于跨分支复用单个提交) main 分支执行 git cherry-pick e4f5g6h,将 e4f5g6h 提交复制到 main

实用命令详解:

1.清理未跟踪文件

git clean -fd:用于删除工作区中所有未被 Git 跟踪的文件(如编译产物、临时文件),执行前建议先用 git clean -nfd 预览会删除的内容(-n 表示模拟操作)。

2.查看差异

  • git diff:对比工作区与暂存区,显示未暂存的修改(如新增、删除的代码行)。
  • git diff --staged:对比暂存区与本地仓库,确认即将提交的内容是否正确。

3.暂存工作区(stash) 场景:正在开发分支 A,需紧急切换到分支 B 修复 bug,但分支 A 的修改未完成不想提交。

git stash       # 暂存分支 A 的修改
git checkout B  # 切换到分支 B 修复 bug
# 修复完成后切换回分支 A
git checkout A
git stash pop   # 恢复暂存的修改,继续开发

4.复制提交(cherry-pick) 场景:分支 feature/login 有一个修复 e4f5g6h 需同步到 main 分支,但不想合并整个分支。

git checkout main       # 切换到目标分支
git cherry-pick e4f5g6h # 复制 e4f5g6h 提交到 main 分支

若复制时出现冲突,解决方式与合并冲突相同,解决后执行 git cherry-pick --continue 完成操作。

九、常见问题与解决方法

1.提交后发现用户名/邮箱错误 若需修改历史提交的用户信息(仅限未推送到远程的提交):

git commit --amend --author="用户名 <邮箱>" --no-edit

若已推送且必须修改(不推荐,会改写历史),需强制推送:

git commit --amend --author="用户名 <邮箱>" --no-edit
git push --force origin 分支名  # 谨慎使用,可能覆盖团队成员的提交

2.误将敏感文件提交到仓库 需彻底从历史中删除(以 config.ini 为例):

git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch config.ini" \
--prune-empty --tag-name-filter cat -- --all
# 推送修改(会改写历史,需通知团队)
git push origin --force --all

同时在 .gitignore 中添加该文件,避免再次提交。

3.拉取代码时提示“Your local changes would be overwritten by merge” 原因:本地有未提交的修改,拉取会覆盖。 解决:

  • 提交本地修改:git add . && git commit -m "暂存本地修改"
  • 暂存本地修改:git stash,拉取后恢复:git stash pop

总结

本手册覆盖了 Git 日常开发的核心命令,从基础配置到高级操作,结合具体场景和示例,方便快速查阅和使用。Git 命令较多,建议优先掌握 分支管理、提交撤销、远程协作 三类核心操作,其余命令可在需要时对照手册查询。随着使用熟练度提升,可通过配置别名、组合命令进一步提高效率,逐步掌握 Git 的强大功能。