开发者必备 Git 命令速查表

· 12分钟阅读

目录

Git 是现代软件开发的基石。无论你是独自工作还是与数百人的团队协作,掌握 Git 命令对于高效的版本控制和代码管理都至关重要。

这份全面的速查表涵盖了从基本操作到高级技巧的所有内容。收藏此页面,随时查阅所需的 Git 命令参考。

设置与配置

在开始使用 Git 之前,你需要配置你的身份和偏好设置。这些设置决定了 Git 的行为方式以及你的提交如何归属。

初始配置

在每台机器上运行一次这些命令来设置你的 Git 环境:

# 设置你的姓名和邮箱(必需)
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

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

# 启用彩色输出以提高可读性
git config --global color.ui auto

# 设置你偏好的文本编辑器
git config --global core.editor "code --wait"  # VS Code
git config --global core.editor "vim"          # Vim
git config --global core.editor "nano"         # Nano

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

# 查看特定配置
git config user.name
git config user.email

--global 标志将设置应用于你机器上的所有仓库。要为单个仓库配置设置,请导航到该仓库并省略 --global 标志。

配置级别

Git 有三个配置级别,每个级别都会覆盖前一个:

级别 标志 位置 作用域
系统 --system /etc/gitconfig 机器上的所有用户
全局 --global ~/.gitconfig 当前用户的所有仓库
本地 --local .git/config 仅当前仓库

专业提示: 通过在每个仓库中设置本地配置,为工作和个人项目使用不同的邮箱地址。这可以防止意外使用错误的身份提交。

有用的配置选项

# 设置凭据缓存(避免重复输入密码)
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'

# 启用自动换行符转换
git config --global core.autocrlf true   # Windows
git config --global core.autocrlf input  # Mac/Linux

# 为常用命令设置别名
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 alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'

# 配置合并和差异工具
git config --global merge.tool vimdiff
git config --global diff.tool vimdiff

基本 Git 命令

这些是你每天都会使用的基本命令。在进入高级操作之前先掌握这些。

仓库初始化

# 初始化新的 Git 仓库
git init

# 使用特定分支名称初始化
git init -b main

# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone [email protected]:user/repo.git  # SSH
git clone https://github.com/user/repo.git my-folder  # 自定义文件夹名称

# 仅克隆最近的历史记录(对大型仓库更快)
git clone --depth 1 https://github.com/user/repo.git

处理更改

# 检查工作目录状态
git status
git status -s  # 简短格式
git status -sb # 带分支信息的简短格式

# 暂存文件以供提交
git add filename.js        # 单个文件
git add src/               # 整个目录
git add .                  # 当前目录中的所有更改
git add -A                 # 整个仓库中的所有更改
git add -p                 # 交互式暂存(补丁模式)
git add *.js               # 所有 JavaScript 文件

# 取消暂存文件
git reset filename.js      # 取消暂存特定文件
git reset                  # 取消暂存所有文件

# 提交暂存的更改
git commit -m "feat: add user authentication"
git commit -am "fix: resolve login bug"  # 暂存 + 提交已跟踪文件
git commit --amend         # 修改最后一次提交
git commit --amend --no-edit  # 修改但不更改消息

# 查看差异
git diff                   # 未暂存的更改
git diff --staged          # 已暂存的更改
git diff HEAD              # 自上次提交以来的所有更改
git diff main..feature     # 分支之间
git diff --stat            # 更改摘要

快速提示: 使用 git add -p 交互式地审查和暂存更改。这非常适合仅提交文件的特定部分,同时保留其他更改未暂存。

删除和移动文件

# 删除文件
git rm filename.js         # 从工作目录中删除并暂存删除操作
git rm --cached filename.js # 从 Git 中删除但保留在工作目录中
git rm -r directory/       # 递归删除目录

# 移动或重命名文件
git mv old-name.js new-name.js
git mv src/file.js lib/file.js  # 移动到不同目录

当你使用 git mvgit rm 时,更改会自动暂存。这比使用常规 shell 命令然后单独暂存更改更方便。

分支与合并

分支是 Git 的杀手级功能。它们允许你同时处理多个功能,而不会干扰主代码库。

分支管理

# 列出分支
git branch                 # 本地分支
git branch -r              # 远程分支
git branch -a              # 所有分支(本地 + 远程)
git branch -v              # 带最后提交信息
git branch --merged        # 已合并到当前分支的分支
git branch --no-merged     # 尚未合并的分支

# 创建分支
git branch feature-login   # 创建新分支
git checkout -b feature-login  # 创建并切换到新分支
git switch -c feature-login    # checkout 的现代替代方案

# 切换分支
git checkout main          # 切换到 main 分支
git switch main            # 现代替代方案
git checkout -            # 切换到上一个分支

# 重命名分支
git branch -m old-name new-name  # 重命名分支
git branch -M new-name     # 强制重命名当前分支

# 删除分支
git branch -d feature-login     # 删除已合并的分支
git branch -D feature-login     # 强制删除(即使未合并)
git push origin --delete feature-login  # 删除远程分支

合并策略

# 合并分支
git merge feature-login    # 将 feature-login 合并到当前分支
git merge --no-ff feature-login  # 即使快进也创建合并提交
git merge --squash feature-login # 将所有提交压缩为一个

# 中止合并
git merge --abort

# 解决冲突后继续
git merge --continue
合并类型 命令 何时使用
快进 git merge 线性历史,无分歧
非快进 git merge --no-ff 保留功能分支历史
压缩 git merge --squash 清理历史,合并所有提交
变基 git rebase 线性历史,重写提交

变基

变基通过将你的分支移动到新的基础提交来重写提交历史。这会创建更清晰的线性历史,但应谨慎使用。

# 将当前分支变基到 main
git rebase main

# 交互式变基(编辑、压缩、重新排序提交)
git rebase -i HEAD~3       # 最后 3 次提交
git rebase -i main         # 自从从 main 分支以来的所有提交

# 解决冲突后继续
git rebase --continue

# 跳过当前提交
git rebase --skip

# 中止变基
git rebase --abort

专业提示: 永远不要变基已推送到共享分支的提交。变基会重写历史,这可能会给协作者带来严重问题。仅在推送前用于本地清理。

解决合并冲突

当 Git 无法自动合并更改时,你需要手动解决冲突:

  1. 运行 git status 查看哪些文件有冲突
  2. 打开冲突文件并查找冲突标记(<<<<<<<=======>>>>>>>)
  3. 编辑文件以解决冲突,删除标记
  4. 使用 git add 暂存已解决的文件
  5. 使用 git commitgit merge --continue 完成合并
# 使用合并工具解决冲突
git mergetool

# 接受一方的所有更改
git checkout --ours filename.js    # 保留你的版本
git checkout --theirs filename.js  # 保留他们的版本

远程操作

远程仓库实现协作。这些命令帮助你将本地工作与 GitHub、GitLab 或 Bitbucket 等远程服务器同步。

管理远程仓库

# 列出远程仓库
git remote
git remote -v              # 带 URL

# 添加远程仓库
git remote add origin https://github.com/user/repo.git
git remote add upstream https://github.com/original/repo.git

# 更改远程 URL
git remote set-url origin [email protected]:user/repo.git

# 删除远程仓库
git remote remove origin

# 重命名远程仓库
git remote rename origin upstream

# 显示远程详情
git remote show origin

获取和拉取

# 从远程获取更改(不合并)
git fetch origin
git fetch --all            # 从所有远程获取
git fetch --prune          # 删除已删除的远程分支

# 拉取更改(获取 + 合并)
git pull origin main
git pull --rebase origin main  # 获取 + 变基而不是合并
git pull --ff-only         # 仅快进,如果需要合并则失败

# 自动暂存拉取
git pull --autostash

fetchpull 之间的区别很重要。Fetch 下载更改但不修改你的工作目录,而 pull 会自动合并更改。

推送更改

# 推送到远程
git push origin main
git push -u origin feature-login  # 设置上游并推送
git push --all             # 推送所有分支
git push --tags            # 推送所有标签

# 强制推送(谨慎使用!)
git push --force           # 覆盖远程历史
git push --force-with-lease # 更安全的强制推送,如果远程已更新则失败

# 删除远程分支
git push origin --delete feature-login
git push origin :feature-login  # 替代语法

专业提示: 当需要强制推送时,使用 --force-with-lease 而不是 --force。如果自上次获取以来远程已更新,它可以防止你意外覆盖别人的工作。

跟踪分支

# 设置上游分支
git branch --set-upstream-to=origin/main main
git branch -u origin/main  # 简写

# 创建跟踪分支
git checkout -b feature origin/feature
git checkout --track origin/feature  # 自动命名

# 查看跟踪关系
git branch -vv

暂存更改

暂存会临时搁置更改,以便你可以处理其他事情而无需提交未完成的工作。

# 暂存当前更改
git stash
git stash save "work in progress on login feature"
git stash -u               # 包括未跟踪的文件
git stash -a               # 包括未跟踪和忽略的文件

# 列出暂存
git stash list

# 应用暂存的更改
git stash apply            # 应用最近的暂存
git stash apply stash@{2}  # 应用特定暂存
git stash pop              # 应用并从暂存列表中删除

# 查看暂存内容
git stash show
git stash show -p          # 显示完整差异
git stash show stash@{1}   # 显示特定暂存

# 从暂存创建分支
git stash branch feature-name

# 删除暂存
git stash drop stash@{1}   # 删除特定暂存
git stash clear            # 删除所有暂存

暂存非常适合