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
解决冲突的步骤:
- 打开冲突文件并编辑它们以解决冲突
- 删除冲突标记(
<<<<<<<、=======、>>>>>>>) - 使用
git add暂存已解决的文件 - 使用
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 # 拉取特定分支
fetch 和 pull 的区别: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 # 更安全的强制推送