没有找到匹配的命令
基础配置
配置与初始化
git config - 配置Git
常用参数:--global 全局配置 --local 仓库级配置 --list 查看配置 --unset 删除配置
# 设置用户名和邮箱(全局) git config --global user.name "Your Name" git config --global user.email "you@example.com" # 设置默认分支名为 main git config --global init.defaultBranch main # 设置别名 git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit git config --global alias.lg "log --oneline --graph --all" # 查看所有配置 git config --list # 查看某项配置 git config user.name # 编辑全局配置文件 git config --global --edit
首次使用Git必须配置用户名和邮箱。--global 对所有仓库生效,--local 仅对当前仓库生效(默认)。
git init - 初始化仓库
# 在当前目录初始化 git init # 在指定目录初始化 git init my-project # 初始化裸仓库(用于服务器) git init --bare
在当前目录创建 .git 文件夹,将其变为Git仓库。通常配合 git remote add 关联远程仓库。
git clone - 克隆仓库
常用参数:-b 指定分支 --depth 浅克隆 --single-branch 只克隆指定分支
# HTTPS 克隆 git clone https://github.com/user/repo.git # SSH 克隆 git clone git@github.com:user/repo.git # 克隆到指定目录 git clone https://github.com/user/repo.git my-folder # 克隆指定分支 git clone -b develop https://github.com/user/repo.git # 浅克隆(只获取最近1次提交,速度快) git clone --depth 1 https://github.com/user/repo.git
clone 会自动创建目录、初始化 .git、拉取所有历史并检出默认分支。
日常工作流
暂存与提交
git add - 添加到暂存区
常用参数:. 添加所有 -p 交互式添加 -A 添加所有(含删除) -u 只添加已跟踪的修改
# 添加指定文件 git add index.html git add src/app.js # 添加所有修改(新文件和修改) git add . # 添加所有修改(包括删除的文件) git add -A # 交互式选择要暂存的修改 git add -p # 只暂存已跟踪文件的修改(不包括新文件) git add -u
git add 将文件的修改放入暂存区(Staging Area),准备下次提交。git add -p 可以逐块选择要暂存的内容。
git commit - 提交更改
常用参数:-m 提交信息 --amend 修改上次提交 --allow-empty 空提交 -a 自动暂存已跟踪文件
# 普通提交 git commit -m "feat: add login page" # 提交并自动暂存所有已跟踪文件 git commit -am "fix: update button style" # 修改上次提交(追加修改或修改提交信息) git commit --amend -m "feat: add login page and validation" # 修改上次提交信息(不追加修改) git commit --amend --no-edit # 空提交(常用于触发CI) git commit --allow-empty -m "chore: trigger CI build"
--amend 会修改最近一次提交,不要对已推送的提交使用。建议遵循 Conventional Commits 规范。
git status - 查看状态
常用参数:-s 简短输出 -b 显示分支信息
# 查看完整状态 git status # 简短输出 git status -s # 显示分支信息 git status -sb
显示工作区、暂存区的状态。M 修改、A 新增、D 删除、?? 未跟踪。红色表示未暂存,绿色表示已暂存。
查看与比较
git log - 查看提交历史
常用参数:--oneline 简洁 --graph 图形 -n 限制条数 --author 按作者 --since 按时间 -p 显示差异
# 美化日志(图形+简洁+所有分支) git log --oneline --graph --all # 查看最近5条 git log -5 # 查看某文件的修改历史 git log -- path/to/file.js # 按作者过滤 git log --author="zhangsan" # 按时间过滤 git log --since="2024-01-01" --until="2024-06-01" # 显示每次提交的修改内容 git log -p -2 # 自定义格式 git log --pretty=format:"%h - %an, %ar : %s"
git log 显示提交历史。推荐配置 alias.lg = "log --oneline --graph --all" 快速查看。
git diff - 查看差异
常用参数:--staged 暂存区差异 --cached 同 --staged branch1..branch2 分支差异 --stat 统计摘要
# 工作区 vs 暂存区(未暂存的修改) git diff # 暂存区 vs 最新提交(已暂存的修改) git diff --staged # 或 git diff --cached # 工作区 vs 指定提交 git diff HEAD~2 # 两个分支之间的差异 git diff main..feature # 只看文件名和统计 git diff --stat # 查看某文件的差异 git diff src/app.js
git diff 显示文件差异。不加参数显示工作区与暂存区的差异,--staged 显示暂存区与仓库的差异。
分支操作
分支管理
git branch - 分支管理
常用参数:-a 所有分支(含远程) -d 删除 -D 强制删除 -m 重命名 -r 远程分支
# 列出本地分支 git branch # 列出所有分支(本地+远程) git branch -a # 创建新分支 git branch feature-login # 创建并切换到新分支 git checkout -b feature-login # 或(Git 2.23+) git switch -c feature-login # 删除分支(已合并) git branch -d feature-login # 强制删除分支(未合并也删除) git branch -D feature-login # 重命名当前分支 git branch -m new-name # 重命名指定分支 git branch -m old-name new-name
分支是Git的核心特性。建议使用有意义的分支名,如 feature/xxx、bugfix/xxx、hotfix/xxx。
git checkout / git switch - 切换分支
git switch 是 Git 2.23+ 推荐的切换分支命令,语义更清晰
# 切换到已有分支 git checkout develop # 或(推荐) git switch develop # 创建并切换到新分支 git checkout -b feature-login # 或(推荐) git switch -c feature-login # 切换到上一个分支 git switch - # 切换到指定提交(detached HEAD) git checkout abc1234 # 恢复工作区文件(丢弃修改) git checkout -- file.js # 或(推荐) git restore file.js
git switch 专用于切换分支,git checkout 功能更多(还可恢复文件)。建议使用 git switch 切换分支。
git merge - 合并分支
常用参数:--no-ff 禁止快进合并 --abort 取消合并 --squash 压缩合并
# 合并指定分支到当前分支 git merge feature-login # 禁止快进合并(保留合并记录) git merge --no-ff feature-login # 压缩合并(将所有提交合并为一个) git merge --squash feature-login git commit -m "merge feature-login" # 合并冲突后,解决冲突文件后 git add . git commit # 取消合并 git merge --abort
merge 将指定分支的更改合并到当前分支。冲突时需手动编辑冲突文件,然后 git add 并 git commit。
git rebase - 变基
常用参数:-i 交互式变基 --continue 继续 --abort 取消 --onto 指定基础
# 将当前分支变基到 main git rebase main # 交互式变基(修改最近3次提交) git rebase -i HEAD~3 # 变基到指定提交 git rebase --onto main feature~1 feature # 解决冲突后继续 git rebase --continue # 取消变基 git rebase --abort # 跳过当前提交 git rebase --skip
rebase 重新排列提交历史,使线性更清晰。交互式变基可合并、编辑、删除、重排提交。注意:不要对已推送的提交执行 rebase。
git cherry-pick - 拣选提交
常用参数:提交哈希 --no-commit 不自动提交 --abort 取消 --continue 继续
# 拣选单个提交 git cherry-pick abc1234 # 拣选多个提交 git cherry-pick abc1234 def5678 # 拣选一个范围(不含起始提交) git cherry-pick start..end # 拣选但不自动提交 git cherry-pick --no-commit abc1234 # 解决冲突后继续 git cherry-pick --continue # 取消拣选 git cherry-pick --abort
cherry-pick 将其他分支的某个提交应用到当前分支。适用于将 hotfix 从生产分支移植到开发分支。
远程操作
远程仓库
git remote - 管理远程仓库
常用参数:add 添加 -v 详细信息 remove 删除 rename 重命名 set-url 修改URL
# 查看远程仓库 git remote git remote -v # 添加远程仓库 git remote add origin https://github.com/user/repo.git # 删除远程仓库 git remote remove origin # 重命名远程仓库 git remote rename old-name new-name # 修改远程仓库URL git remote set-url origin https://github.com/user/new-repo.git # 查看某个远程仓库的信息 git remote show origin
origin 是默认的远程仓库名称。一个仓库可以有多个远程仓库(如 origin、upstream)。
git fetch - 拉取远程更新
常用参数:--all 所有远程 -p 清理已删除的远程分支
# 拉取 origin 的更新 git fetch origin # 拉取所有远程仓库的更新 git fetch --all # 拉取并清理已删除的远程分支 git fetch -p # 拉取指定分支 git fetch origin main
fetch 只拉取远程数据到本地,不自动合并。安全操作,可以先查看再决定是否 merge。
git pull - 拉取并合并
常用参数:--rebase 使用变基代替合并 --no-rebase 使用合并
# 拉取并合并(默认merge) git pull origin main # 拉取并变基(推荐,保持线性历史) git pull --rebase origin main # 设置默认使用 rebase git config pull.rebase true # 等价于 git fetch origin git merge origin/main
git pull = git fetch + git merge。建议使用 --rebase 保持提交历史线性。团队协作时推荐先 pull 再 push。
git push - 推送到远程
常用参数:-u 设置上游 --delete 删除远程分支 --tags 推送标签
# 推送到远程 git push origin main # 首次推送并设置上游(之后可直接 git push) git push -u origin main # 推送所有分支 git push --all # 推送所有标签 git push --tags # 删除远程分支 git push origin --delete feature-login
-u 设置上游分支后,以后直接 git push / git pull 即可。推送前确保已 commit。
git push --force - 强制推送
# 强制推送(覆盖远程历史) git push --force origin main # 更安全的强制推送(不会覆盖他人的新提交) git push --force-with-lease origin main
警告:强制推送会覆盖远程历史,可能导致团队成员的提交丢失。仅限个人分支或确认安全时使用。推荐 --force-with-lease。
撤销与回退
回退操作
git reset - 回退提交
常用参数:--soft 保留暂存区 --mixed(默认)保留工作区 --hard 全部丢弃
# --soft: 回退提交,修改保留在暂存区 git reset --soft HEAD~1 # --mixed(默认): 回退提交,修改保留在工作区(未暂存) git reset HEAD~1 git reset --mixed HEAD~1 # --hard: 回退提交,丢弃所有修改(危险!) git reset --hard HEAD~1 # 回退到指定提交 git reset --hard abc1234 # 回退暂存区的文件(保留工作区修改) git reset HEAD file.js # 或(推荐) git restore --staged file.js
--soft 保留暂存区(可重新提交),--mixed 保留工作区(需重新 add),--hard 全部丢弃(不可恢复)。已推送的提交不要用 reset。
git revert - 撤销提交(安全方式)
常用参数:-n / --no-commit 不自动提交
# 撤销指定提交(生成新的提交) git revert abc1234 # 撤销多个提交 git revert abc1234 def5678 # 撤销最近一次提交 git revert HEAD # 撤销一个范围的提交 git revert HEAD~3..HEAD # 撤销但不自动提交 git revert -n abc1234
revert 创建一个新的提交来撤销指定提交的修改,不改变历史记录。适合已推送的提交,团队协作安全。
git stash - 暂存工作区修改
常用参数:push 暂存 pop 恢复并删除 apply 恢复不删除 list 列表 drop 删除 clear 清空
# 暂存当前修改 git stash # 或带描述 git stash push -m "work in progress: login page" # 查看暂存列表 git stash list # 恢复最近的暂存(并删除暂存记录) git stash pop # 恢复指定的暂存 git stash pop stash@{0} # 恢复但不删除暂存记录 git stash apply stash@{0} # 删除指定暂存 git stash drop stash@{0} # 清空所有暂存 git stash clear # 查看暂存的内容 git stash show -p stash@{0}
stash 临时保存未提交的修改,切换分支后再恢复。适合需要紧急切换分支但当前修改不想提交的场景。
git clean - 清理未跟踪文件
常用参数:-n 预览(不实际删除) -f 强制删除 -d 删除目录 -fd 删除文件和目录
# 预览将被删除的文件(安全,不实际删除) git clean -n # 删除未跟踪的文件 git clean -f # 删除未跟踪的文件和目录 git clean -fd # 删除未跟踪的文件和 .gitignore 忽略的文件 git clean -fdx # 预览 git clean -n -fdx
git clean 删除未跟踪的文件(不包括 .gitignore 中的文件,除非加 -x)。建议先用 -n 预览。此操作不可逆!
标签管理
标签
git tag - 标签管理
常用参数:-a 附注标签 -m 标签信息 -d 删除 -l 列表
# 查看所有标签 git tag git tag -l "v1.*" # 创建轻量标签 git tag v1.0.0 # 创建附注标签(推荐) git tag -a v1.0.0 -m "Release version 1.0.0" # 给指定提交打标签 git tag -a v0.9.0 abc1234 -m "Beta release" # 推送标签到远程 git push origin v1.0.0 # 推送所有标签 git push origin --tags # 删除本地标签 git tag -d v1.0.0 # 删除远程标签 git push origin --delete v1.0.0 # 或 git push origin :refs/tags/v1.0.0 # 查看标签信息 git show v1.0.0
附注标签(-a)存储完整信息,推荐用于版本发布。轻量标签只是一个指针。标签默认不会随 push 推送。
高级操作
调试与排查
git bisect - 二分查找问题提交
# 开始二分查找 git bisect start # 标记当前提交为有bug git bisect bad # 标记已知正常的提交 git bisect good v1.0.0 # Git 会自动检出中间的提交,测试后标记 git bisect good # 当前提交正常 git bisect bad # 当前提交有bug # 重复直到找到引入bug的提交 # 找到后结束查找 git bisect reset
git bisect 用二分法快速定位引入bug的提交。适合在大量提交中查找问题来源。
git reflog - 查看操作记录
常用参数:默认显示 HEAD 的记录 --all 所有引用
# 查看HEAD的操作记录 git reflog # 查看所有引用的记录 git reflog --all # 查看指定数量的记录 git reflog -10 # 利用 reflog 恢复误删的提交 git reflog # 找到误删前的提交哈希,如 abc1234 git reset --hard abc1234
reflog 记录所有 HEAD 和分支引用的变更历史。是"后悔药",即使 reset --hard 也能通过 reflog 恢复。
git blame - 查看行归属
常用参数:-L 指定行范围 -e 显示邮箱
# 查看整个文件的每行最后修改者 git blame src/app.js # 查看指定行范围 git blame -L 10,20 src/app.js # 查看指定行到最后 git blame -L 10, src/app.js # 显示邮箱而非用户名 git blame -e src/app.js
blame 显示文件每一行最后是谁修改的、在哪个提交中修改的。适合追溯代码变更历史和责任人。
git cherry - 查看未推送的提交
# 查看当前分支未推送到上游的提交 git cherry -v upstream/main # 查看相对于指定分支的未推送提交 git cherry -v origin/main
git cherry 显示当前分支中尚未推送到上游的提交。+ 号表示上游没有的提交,- 号表示上游已有的提交。