Git 速查表:每个开发者必备的命令

· 12分钟阅读

📑 目录

Git 是世界上使用最广泛的版本控制系统,为数百万个项目提供支持,从个人副业项目到企业应用程序。无论你是独立开发者还是大型团队的一员,掌握基本的 Git 命令都能节省时间并避免错误。

这份全面的速查表涵盖了日常开发工作所需的每个命令,从基本操作到高级工作流。我们按任务类型进行了组织,以便你在需要时快速找到所需内容。

将此页面加入书签作为快速参考。如需格式化你的 Git 文档和 README 文件,请尝试我们的Markdown 编辑器

设置与配置

在第一次提交之前,你需要配置你的身份。这些设置会全局存储并附加到你所做的每次提交中,以便其他开发者知道是谁做了哪些更改。

初始设置

git config --global user.name "你的名字"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"

--global 标志将这些设置应用于你机器上的所有仓库。如果你需要为特定项目设置不同的配置,请在该仓库内运行相同的命令但不加 --global

有用的配置选项

git config --global color.ui auto              # 启用彩色输出
git config --global core.autocrlf true         # 处理行尾符(Windows)
git config --global core.autocrlf input        # 处理行尾符(Mac/Linux)
git config --global pull.rebase false          # 拉取时使用合并策略
git config --global alias.st status            # 创建快捷方式:git st
git config --global alias.co checkout          # 创建快捷方式:git co
git config --global alias.br branch            # 创建快捷方式:git br
git config --global alias.ci commit            # 创建快捷方式:git ci

专业提示:为你经常使用的命令创建别名。上述快捷方式每周可以为你节省数百次按键。你还可以创建更复杂的别名,如 git config --global alias.lg "log --oneline --graph --all" 来获得可视化的提交历史。

查看和编辑配置

git config --list                              # 查看所有设置
git config --list --show-origin                # 显示每个设置的定义位置
git config user.name                           # 查看特定设置
git config --global --edit                     # 在编辑器中编辑全局配置

创建仓库

开始使用 Git 有两种方式:初始化新仓库或从远程服务器克隆现有仓库。

初始化新仓库

git init                                       # 在当前目录初始化仓库
git init my-project                            # 创建带仓库的新目录
git init --bare shared-repo.git                # 创建裸仓库(用于服务器)

当你运行 git init 时,Git 会创建一个隐藏的 .git 目录,用于存储所有版本控制信息。该目录包含你的整个项目历史、配置和元数据。

克隆现有仓库

git clone https://github.com/user/repo.git     # 通过 HTTPS 克隆
git clone [email protected]:user/repo.git         # 通过 SSH 克隆
git clone <url> my-folder                      # 克隆到特定目录
git clone --depth 1 <url>                      # 浅克隆(仅最新提交)
git clone --branch develop <url>               # 克隆特定分支

浅克隆对于 CI/CD 流水线或当你只需要最新代码而不需要完整历史时很有用。它们速度明显更快且占用更少的磁盘空间。

快速提示:使用 SSH URL 而不是 HTTPS 可以避免重复输入密码。只需设置一次 SSH 密钥即可享受无缝身份验证。GitHub、GitLab 和 Bitbucket 都支持 SSH 身份验证。

基本工作流命令

核心 Git 工作流围绕三个区域:工作目录(你的文件)、暂存区(准备提交的更改)和仓库(已提交的历史)。理解这个流程对于有效使用 Git 至关重要。

检查状态

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

经常运行 git status。它显示哪些文件被修改、暂存或未跟踪,并帮助你了解仓库的当前状态。

暂存更改

git add file.txt                               # 暂存特定文件
git add *.js                                   # 暂存所有 JavaScript 文件
git add .                                      # 暂存所有更改
git add -A                                     # 暂存所有更改(包括删除)
git add -p                                     # 交互式暂存更改(补丁模式)
git add -u                                     # 仅暂存已修改和已删除的文件

暂存区(也称为索引)让你可以精确地制作提交。你可以只暂存想要包含的更改,即使你修改了多个文件。

专业提示:使用 git add -p 以块为单位审查和暂存更改。这种交互模式让你可以将大的更改拆分为逻辑提交,使你的历史更清晰、更易于审查。在补丁模式下按 ? 可查看所有可用选项。

提交更改

git commit -m "添加用户身份验证"                # 带消息提交
git commit -am "修复登录错误"                   # 暂存已跟踪文件 + 提交
git commit --amend                             # 修改最后一次提交
git commit --amend --no-edit                   # 修改但不更改消息
git commit -v                                  # 在提交消息编辑器中显示差异

编写清晰、描述性的提交消息。一个好的格式是:简短摘要(50个字符或更少),然后是空行,如果需要的话再加上详细说明。

查看更改

git diff                                       # 显示未暂存的更改
git diff --staged                              # 显示已暂存的更改
git diff HEAD                                  # 显示自上次提交以来的所有更改
git diff branch1..branch2                      # 比较两个分支
git diff --stat                                # 显示更改统计
git diff --word-diff                           # 显示单词级别的差异

分支与合并

分支是 Git 最强大的功能之一。它们让你可以在不影响主代码库的情况下,独立地处理功能、修复或实验。

分支管理

git branch                                     # 列出本地分支
git branch -a                                  # 列出所有分支(本地 + 远程)
git branch feature-login                       # 创建新分支
git branch -d feature-login                    # 删除分支(安全)
git branch -D feature-login                    # 强制删除分支
git branch -m old-name new-name                # 重命名分支
git branch -vv                                 # 显示带跟踪信息的分支

切换分支

git checkout feature-login                     # 切换到分支
git checkout -b feature-signup                 # 创建并切换到新分支
git checkout -                                 # 切换到上一个分支
git switch feature-login                       # 切换分支的现代方式
git switch -c feature-signup                   # 创建并切换(现代语法)

git switch 命令在 Git 2.23 中引入,作为 git checkout 的更清晰替代方案,后者有多种用途。两者在切换分支时的工作方式完全相同。

合并分支

git merge feature-login                        # 将分支合并到当前分支
git merge --no-ff feature-login                # 强制合并提交(无快进)
git merge --squash feature-login               # 将提交压缩为一个
git merge --abort                              # 取消正在进行的合并

当你合并时,Git 会组合来自两个分支的更改。如果两个分支都修改了相同的行,你将遇到需要手动解决的合并冲突。

解决合并冲突

当发生冲突时,Git 会在你的文件中标记冲突部分:

<<<<<<< HEAD
你当前的更改
=======
来自被合并分支的传入更改
>>>>>>> feature-branch

解决冲突的步骤:

  1. 打开冲突文件并编辑它们以解决冲突
  2. 删除冲突标记(<<<<<<<=======>>>>>>>
  3. 使用 git add 暂存已解决的文件
  4. 使用 git commit 完成合并
git status                                     # 查看哪些文件有冲突
git add resolved-file.js                       # 标记冲突为已解决
git merge --continue                           # 解决后继续合并
git merge --abort                              # 放弃并重新开始

专业提示:使用可视化合并工具更轻松地解决冲突。使用 git config --global merge.tool <工具名称> 配置一个(选项包括 meld、kdiff3、vimdiff 或你的 IDE 内置工具),然后在发生冲突时运行 git mergetool

变基

git rebase main                                # 将当前分支变基到 main
git rebase -i HEAD~3                           # 交互式变基最后3次提交
git rebase --continue                          # 解决冲突后继续
git rebase --abort                             # 取消正在进行的变基
git rebase --skip                              # 在变基期间跳过当前提交

变基通过将你的提交移动到新基础来重写历史。它创建更清晰的线性历史,但绝不应该在其他人正在使用的公共分支上执行。

远程操作

远程仓库是托管在互联网或网络上的项目版本。它们支持协作和备份。

管理远程仓库

git remote                                     # 列出远程连接
git remote -v                                  # 列出带 URL 的远程仓库
git remote add origin <url>                    # 添加新远程仓库
git remote remove origin                       # 删除远程仓库
git remote rename origin upstream              # 重命名远程仓库
git remote set-url origin <new-url>            # 更改远程 URL
git remote show origin                         # 显示详细的远程信息

获取和拉取

git fetch                                      # 下载远程更改
git fetch origin                               # 从特定远程仓库获取
git fetch --all                                # 从所有远程仓库获取
git fetch --prune                              # 删除已删除的远程分支
git pull                                       # 获取并合并远程更改
git pull --rebase                              # 获取并变基而不是合并
git pull origin main                           # 拉取特定分支

fetchpull 的区别:fetch 下载更改但不修改你的工作目录,而 pull 获取并立即合并更改。

推送更改

git push                                       # 推送到默认远程/分支
git push origin main                           # 推送到特定远程/分支
git push -u origin feature-login               # 推送并设置上游跟踪
git push --all                                 # 推送所有分支
git push --tags                                # 推送所有标签
git push --force                               # 强制推送(危险!)
git push --force-with-lease                    # 更安全的强制推送