跳转到内容
Mireve的小屋
返回

Git 常用命令完全指南

目录

引言

Git 是目前最流行的分布式版本控制系统,几乎每个开发者每天都在使用。无论你是刚入门的新手,还是想巩固基础的老手,掌握 Git 的常用命令都能让你的开发效率大幅提升。

本文将从零开始,按使用场景带你逐步掌握 Git 的核心命令。

1. 安装与配置

安装 Git

各平台安装方式:

# macOS
brew install git

# Ubuntu / Debian
sudo apt install git

# Windows
# 从 https://git-scm.com/download/win 下载安装包

首次配置

安装完成后,第一件事是配置用户名和邮箱——每次提交都会附带这些信息。

git config --global user.name "你的名字"
git config --global user.email "your@email.com"

常用配置项:

# 查看所有配置
git config --list

# 设置默认分支名
git config --global init.defaultBranch main

# 设置别名(提高效率)
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

# 设置编辑器
git config --global core.editor "code --wait"
Tip

使用 --global 表示全局生效,如果不同项目需要不同身份,可以在项目目录去掉 --global 来单独设置。

2. 创建仓库

有两种方式开始使用 Git:初始化新仓库,或克隆已有仓库。

初始化新仓库

# 在当前目录初始化
git init

# 初始化后会自动创建一个 .git 目录(不要手动修改它)

克隆已有仓库

# 克隆远程仓库到本地
git clone https://github.com/用户名/仓库名.git

# 克隆到指定目录
git clone https://github.com/用户名/仓库名.git my-folder

# 克隆指定分支
git clone -b 分支名 https://github.com/用户名/仓库名.git

3. 日常操作流程

这是最常用的工作流,每天都会用到。

查看状态

git status

这个命令会告诉你当前工作目录的状态:哪些文件被修改了、哪些暂存了、哪些未跟踪。

添加文件到暂存区

# 添加单个文件
git add index.html

# 添加所有变更
git add .

# 交互式添加(选择部分修改)
git add -p

提交变更

# 提交暂存区的内容
git commit -m "feat: 添加用户登录功能"

# 跳过暂存区,直接提交已跟踪文件的修改
git commit -a -m "fix: 修复导航栏样式"

# 修改上一次提交(还没推送时使用)
git commit --amend -m "修正后的提交信息"
Warning

--amend 会改写提交历史,仅用于尚未推送到远程的提交。

查看提交历史

# 查看提交日志
git log

# 简洁模式(一行一个提交)
git log --oneline

# 图形化显示分支
git log --graph --oneline --all

# 查看指定文件的修改历史
git log -p 文件名

# 按作者筛选
git log --author="Mireve"

# 最近 N 条
git log -5

比较差异

# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --staged

# 查看两个提交之间的差异
git diff commit1..commit2

# 仅查看文件名列表
git diff --name-only

4. 分支管理

分支是 Git 最强大的特性之一,让你可以并行开发不同功能。

创建与切换分支

# 列出本地分支
git branch

# 列出所有分支(含远程)
git branch -a

# 创建新分支
git branch feature-login

# 切换分支
git checkout feature-login

# 创建并切换分支(推荐)
git checkout -b feature-login

# 或者使用新版命令(更直观)
git switch feature-login
git switch -c feature-login
Note

git switchgit restore 是 Git 2.23+ 引入的新命令,将 checkout 的职责拆分为”切换分支”和”恢复文件”两个独立操作,语义更清晰。

合并分支

# 将 feature 分支合并到当前分支
# 先切换到目标分支
git checkout main
# 再合并
git merge feature-login

遇到合并冲突时,Git 会标记冲突文件。手动解决后执行:

# 标记冲突已解决
git add 已解决冲突的文件
# 完成合并
git commit

变基

变基可以让提交历史更整洁,但需谨慎使用。

# 将当前分支的提交变基到 main 之上
git rebase main

# 交互式变基(合并、修改、重排提交)
git rebase -i HEAD~3
Warning

绝对不要对已推送到远程的提交执行变基。变基会改写历史,推送时需要 --force,这会影响到协作者。

暂存工作

当需要临时切换分支处理别的事,又不想提交当前工作:

# 暂存当前修改
git stash

# 暂存并添加描述
git stash save "WIP: 用户模块重构"

# 查看暂存列表
git stash list

# 恢复最近一次暂存
git stash pop

# 恢复但不删除暂存
git stash apply

# 删除暂存
git stash drop

5. 远程协作

多人开发离不开远程仓库的操作。

管理远程仓库

# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin https://github.com/用户名/仓库名.git

# 删除远程仓库
git remote remove origin

# 修改远程仓库地址
git remote set-url origin https://github.com/用户名/新仓库名.git

推送与拉取

# 推送到远程(第一次需要关联)
git push -u origin main

# 之后只需
git push

# 拉取远程更新并合并
git pull

# 拉取但不合并(先看看远程有什么)
git fetch

# 拉取远程的特定分支
git pull origin feature-login
Tip

git pull 本质是 git fetch + git merge。如果你更倾向于用变基代替合并,可以设置:git config --global pull.rebase true

处理推送被拒

当远程有新提交而你本地没有时,推送会被拒绝。此时需要先拉取再推送:

git pull
# 解决冲突(如有)
git push

6. 撤销与回滚

Git 提供了多种撤销方式,适用于不同场景。

撤销工作区修改

# 丢弃工作区的修改(危险!不可恢复)
git restore 文件名

# 或者使用旧版命令
git checkout -- 文件名

撤销暂存

# 将文件从暂存区移出,但保留工作区修改
git restore --staged 文件名

# 旧版命令
git reset HEAD 文件名

回退提交

# 回退到上一个提交,但保留工作区修改(soft reset)
git reset --soft HEAD~1

# 回退到上一个提交,同时撤销暂存(mixed reset,默认)
git reset HEAD~1

# 回退到上一个提交,丢弃所有修改(hard reset,危险)
git reset --hard HEAD~1
Danger

git reset --hard 会丢弃工作区和暂存区的所有修改,且不可恢复。使用前请再三确认。

撤销已推送的提交

对于已经推送的提交,应该用 revert 而不是 reset

# 创建一个新的提交,反转指定提交的变更
git revert HEAD

# 撤销多个提交
git revert HEAD~3..HEAD

# 推送到远程
git push

revert 是安全的,因为它不会改写历史,而是新增一个”反做”的提交。

捡起丢失的提交

如果不小心 reset --hard 丢失了提交:

# 查看所有分支操作的历史
git reflog

# 找到丢失的 commit hash,然后恢复
git reset --hard <hash>

reflog 是 Git 的救生索,它会记录本地仓库的所有 HEAD 变动。不过 reflog 也有过期时间(默认 90 天),重要的提交要尽早恢复。

7. 标签管理

标签通常用于标记版本发布。

# 创建附注标签(推荐)
git tag -a v1.0.0 -m "v1.0.0 正式发布"

# 创建轻量标签
git tag v1.0.1

# 查看标签
git tag

# 查看标签详情
git show v1.0.0

# 推送标签到远程
git push origin v1.0.0

# 推送所有标签
git push --tags

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0

8. .gitignore

不是所有文件都应该纳入版本控制。.gitignore 文件告诉 Git 忽略哪些文件或目录。

# 依赖目录
node_modules/
vendor/

# 构建产物
dist/
build/
.env.local

# 系统文件
.DS_Store
Thumbs.db

# IDE 配置
.vscode/
.idea/

建议在项目初始化时就创建 .gitignore,避免误将不需要的文件提交。

9. 实用技巧

查看某行代码是谁写的

git blame 文件名

搜索提交信息或代码

# 搜索提交信息
git log --grep="修复"

# 搜索代码内容(整个历史)
git log -S "函数名" --all

查看当前分支基于哪个分支

git reflog show <分支>

压缩提交历史

合并多个小提交为一个(在推送前使用):

git rebase -i HEAD~3

将除了第一个以外的 pick 改为 squash(或 s),保存退出即可。

从特定提交创建新分支

git branch 新分支名 提交hash
git switch 新分支名

结语

Git 的命令远不止这些,但以上涵盖了日常开发中 90% 以上的场景。掌握这些命令,你已经可以应对绝大多数工作需求。

记住几个要点:

随着使用经验的积累,你会逐渐发现更多 Git 的高级用法。祝你编码愉快!