Git 语法速查
00:00
常用 Git 命令速查表,含使用场景、常见错误,支持搜索和复制
学习指引
前置知识
- 了解版本控制的基本概念
- 已完成 Git 安装并配置用户信息
推荐学习顺序
- 先学习【基础操作】分组,掌握仓库初始化与提交
- 再学习【分支管理】分组,掌握分支创建与合并
基础操作
Git 使用的第一步。本组命令用于初始化仓库、跟踪文件变更和提交代码。初始化仓库
git init输出: Initialized empty Git repository in /path/to/project/.git/
场景: 在本地新建一个 Git 仓库时使用。执行后会在当前目录生成 .git 隐藏文件夹,标志着仓库创建成功。
常见错误
- 错误:
在已有 .git 的目录中再次执行 git init-- 解决: 仓库已存在无需重复初始化,如需重建应先删除 .git 目录
进阶: git init --bare 可创建裸仓库(无工作区),常用于服务器端共享仓库。
克隆远程仓库
git clone https://github.com/user/repo.git输出: Cloning into 'repo'...
remote: Enumerating objects: 120, done.
Receiving objects: 100% (120/120), done.
场景: 需要从远程服务器获取已有项目代码时使用。克隆会自动创建目录并初始化仓库,同时关联远程地址。
常见错误
- 错误:
git clone https://github.com/user/private-repo.git-- 解决: 私有仓库需要配置认证信息,可使用 SSH 地址或配置凭据缓存:git config --global credential.helper cache - 错误:
git clone https://github.com/user/repo.git-- 解决: 目标目录已存在,更换克隆目录或先删除已有目录
进阶: git clone --depth 1 可进行浅克隆,只获取最近一次提交,适用于仅需最新代码的场景,可大幅减少下载量。
查看工作区状态
git status输出: On branch main
Changes not staged for commit:
modified: README.md
Untracked files:
newfile.txt
场景: 需要查看当前工作区哪些文件被修改、哪些文件已暂存、哪些文件未被跟踪时使用。是 Git 中最常用的命令之一。
常见错误
- 错误:
修改文件后直接执行 git commit,跳过 git add-- 解决: 先使用 git add 暂存更改,再执行 git commit 提交
进阶: git status -s 可输出简洁格式,每行一个文件,适合在文件较多时快速浏览。
暂存文件更改
git add README.md输出: (无输出,表示成功)
场景: 将工作区的文件修改添加到暂存区,为下一次提交做准备。可指定单个文件或使用 git add . 暂存所有更改。
常见错误
- 错误:
git add .(在包含敏感文件的目录中执行)-- 解决: 使用 .gitignore 文件排除敏感文件,或使用 git add 指定具体文件名 - 错误:
git add file.txt(修改后再次修改 file.txt 但未重新 add)-- 解决: 每次修改后需重新执行 git add,或使用 git commit -a 跳过手动暂存
进阶: git add -p 可交互式选择部分修改进行暂存(暂存区补丁模式),适合将一个文件的修改拆分为多次提交。
提交更改
git commit -m "feat: 添加用户登录功能"输出: [main abc1234] feat: 添加用户登录功能
2 files changed, 50 insertions(+), 3 deletions(-)
场景: 将暂存区的更改永久记录到版本历史中。每次提交应包含一个清晰描述本次更改的提交信息。
常见错误
- 错误:
git commit -m "修改"(提交信息过于简略)-- 解决: 使用约定式提交格式,如 feat: / fix: / docs: 等前缀,并附上简要说明 - 错误:
git commit(未提供 -m 参数)-- 解决: 始终使用 -m 参数附带提交信息,或提前配置默认编辑器
进阶: git commit -am "消息" 可跳过 git add 直接提交已跟踪文件的修改(不包括新文件)。git commit --amend 可修改最近一次提交。
分支管理
分支是 Git 的核心特性。本组命令用于创建、切换和合并分支,支持多人协作与并行开发。查看与创建分支
git branch
# 创建新分支
git branch feature-login输出: * main
develop
# 创建后无输出,通过 git branch 可看到新分支
场景: 查看当前仓库所有本地分支,或创建新分支。带 * 号的为当前所在分支。创建分支不会自动切换。
常见错误
- 错误:
git branch feature login-- 解决: 分支名不能包含空格,应使用连字符:feature-login - 错误:
git branch feature-login(在错误的分支上创建)-- 解决: 创建前先确认当前分支,或使用 git branch feature-login develop 指定基于哪个分支创建
进阶: git branch -a 可查看所有分支(含远程分支),git branch -d 可删除已合并的分支,git branch -D 强制删除分支。
切换分支
git checkout develop
# 或使用新命令
git switch develop输出: Switched to branch 'develop'
场景: 需要在不同分支之间切换工作时使用。切换前应确保工作区是干净的,否则可能产生冲突。
常见错误
- 错误:
git checkout develop(工作区有未提交的修改且与目标分支冲突)-- 解决: 先提交或暂存修改:git stash,切换后再用 git stash pop 恢复 - 错误:
git checkout develop(拼写错误的分支名)-- 解决: 先用 git branch 确认分支名称是否正确
进阶: git checkout -b feature-login 可创建并切换到新分支,等同于 git branch feature-login && git checkout feature-login。Git 2.23+ 推荐使用 git switch -c。
合并分支
git checkout main
git merge feature-login输出: Merge made by the 'ort' strategy.
login.py | 50 +++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
场景: 将指定分支的修改合并到当前分支。通常在功能开发完成后,将功能分支合并回主分支。
常见错误
- 错误:
git merge feature-login(存在冲突时)-- 解决: 手动打开冲突文件,编辑 <<<<<<< 与 >>>>>>> 之间的内容,保留需要的代码后执行 git add 和 git commit - 错误:
在 feature 分支上执行 git merge main(方向反了)-- 解决: 应先切换到目标分支(如 main),再执行 git merge feature-login
进阶: git merge --no-ff feature-login 可禁用快进合并,保留分支合并记录,便于回溯功能分支的完整历史。
变基操作
git checkout feature-login
git rebase main输出: Successfully rebased and updated refs/heads/feature-login.
场景: 将当前分支的提交重新应用到目标分支的最新提交之上,使提交历史更加线性整洁。与 merge 不同,rebase 不会产生合并提交。
常见错误
- 错误:
git rebase main(在公共分支上执行 rebase)-- 解决: 永远不要在已推送到远程的公共分支上执行 rebase,仅在本地个人分支上使用 - 错误:
git rebase main(存在冲突时中断操作)-- 解决: 解决冲突后执行 git add file.py && git rebase --continue,或使用 git rebase --abort 放弃变基
进阶: git rebase -i HEAD~3 可交互式修改最近 3 次提交(合并、修改、重排),常用于整理提交历史后再推送。