没有找到匹配的命令
基础配置
配置与初始化
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 显示当前分支中尚未推送到上游的提交。+ 号表示上游没有的提交,- 号表示上游已有的提交。