用户配置
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor vim # 设置默认编辑器
查看配置
git config --list
git config user.name
git config --global --list
别名设置
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
📊 仓库操作
初始化
git init # 初始化本地仓库
git clone # 克隆远程仓库
git clone --depth 1 # 浅克隆(只下载最近一次提交)
远程仓库
git remote add origin # 添加远程仓库
git remote -v # 查看远程仓库
git remote show origin # 查看远程仓库详情
git remote remove origin # 移除远程仓库
git remote rename old new # 重命名远程仓库
📈 状态与日志
状态查询
git status # 查看状态
git status -s # 简洁状态
git status --ignored # 显示忽略文件
日志查看
git log # 查看提交历史
git log --oneline # 单行显示
git log --graph # 图形化显示
git log --stat # 显示文件变更统计
git log -p # 显示具体改动
git log --since="2 weeks ago" # 按时间筛选
git log --author="名字" # 按作者筛选
git log -S "关键词" # 搜索代码变更
git log --grep="关键词" # 搜索提交信息
git log --oneline -5 # 最近5条
📤 提交相关
添加文件
git add # 添加特定文件
git add . # 添加所有文件
git add -A # 添加所有变化
git add -u # 更新已跟踪文件
git add -p # 交互式添加
提交
git commit -m "提交信息" # 提交
git commit -am "提交信息" # 添加并提交(已跟踪文件)
git commit --amend # 修改最后一次提交
git commit --amend --no-edit # 修改提交但不改信息
git commit --allow-empty # 空提交
撤销提交
git reset --soft HEAD~1 # 撤销提交但保留修改
git reset --mixed HEAD~1 # 撤销提交和暂存
git reset --hard HEAD~1 # 彻底撤销提交
git revert # 创建反向提交
说明:默认HEAD,例如可以直接git reset --hard
🌿 分支管理
查看分支
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看所有分支
git branch -v # 查看分支最后提交
git branch --merged # 查看已合并分支
git branch --no-merged # 查看未合并分支
创建/删除分支
git branch # 创建分支
git checkout -b # 创建并切换
git switch -c # 创建并切换(Git 2.23+)
git branch -d # 删除分支
git branch -D # 强制删除
git branch -m # 重命名当前分支
切换分支
git checkout # 切换分支
git switch # 切换分支(Git 2.23+)
git checkout - # 切换到上一个分支
合并分支
git merge # 合并分支
git merge --no-ff # 禁用快进合并
git merge --squash # 压缩合并
git merge --abort # 中止合并
变基
git rebase # 变基
git rebase -i HEAD~3 # 交互式变基
git rebase --continue # 继续变基
git rebase --abort # 中止变基
git rebase --skip # 跳过当前提交
🔄 远程操作
拉取
git fetch # 获取远程更新
git fetch origin # 从特定远程获取
git fetch --prune # 获取并清理已删除的远程分支
git pull # 拉取并合并
git pull origin main # 从特定分支拉取
git pull --rebase # 拉取并使用变基
说明:git pull 默认拉取合并当前分支
推送
git push # 推送到远程
git push origin # 推送到特定分支
git push -u origin # 设置上游并推送
git push --force # 强制推送(危险!)
git push --force-with-lease # 安全强制推送
git push --tags # 推送标签
git push origin --delete # 删除远程分支
git push origin : # 删除远程分支(旧语法)
🏷️ 标签管理
git tag # 查看标签
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "版本说明" # 创建附注标签
git tag -d v1.0.0 # 删除标签
git push origin v1.0.0 # 推送标签
git push origin --tags # 推送所有标签
git checkout v1.0.0 # 切换到标签
git show v1.0.0 # 查看标签详情
📦 暂存与清理
储藏
git stash # 储藏当前修改
git stash save "说明" # 储藏并添加说明
git stash list # 查看储藏列表
git stash pop # 应用并删除最新储藏
git stash apply # 应用但不删除
git stash drop # 删除最新储藏
git stash clear # 清空所有储藏
git stash show -p # 查看储藏内容
清理
git clean -n # 预览将被删除的文件
git clean -f # 强制删除未跟踪文件
git clean -fd # 删除未跟踪文件和目录
git clean -x # 删除包括忽略的文件
🔍 比较与查找
比较
git diff # 工作区与暂存区比较
git diff --staged # 暂存区与仓库比较
git diff HEAD # 工作区与最新提交比较
git diff # 两个提交比较
git diff --name-only # 只显示文件名
git diff --stat # 显示统计信息
#保存到当前目录的文件
git diff > diff_output_$(date +%Y%m%d_%H%M%S).txt
#保存到指定路径
git diff > /path/to/your/directory/diff_output.txt
#追加到文件(不覆盖)
git diff >> /path/to/directory/diff_output.txt
#比较两个提交之间的差异
git diff commit1 commit2 > /path/to/diff.txt
#比较工作目录和暂存区的差异
git diff > changes.patch
#比较暂存区和最新提交的差异
git diff --cached > staged_changes.patch
#比较两个分支
git diff branch1...branch2 > branch_diff.txt
查找
git grep "关键词" # 在工作区搜索
git grep -n "关键词" # 显示行号
git grep --cached "关键词" # 在暂存区搜索
git blame # 查看文件每行修改历史
git show # 查看提交详情
git show : # 查看文件在特定提交的内容
⏪ 撤销与恢复
撤销工作区修改
git checkout -- # 撤销文件修改
git checkout . # 撤销所有修改
git restore # 恢复文件(Git 2.23+)
撤销暂存
git reset HEAD # 从暂存区移除
git restore --staged # 取消暂存(Git 2.23+)
恢复删除的文件
git checkout HEAD -- # 恢复被删除的文件
git restore --source=HEAD # 从指定提交恢复
🎯 高级操作
二分查找
git bisect start # 开始二分查找
git bisect bad # 标记为坏版本
git bisect good # 标记为好版本
git bisect reset # 重置二分查找
子模块
git submodule add # 添加子模块
git submodule update --init # 初始化子模块
git submodule update # 更新子模块
重写历史
git filter-branch # 重写历史(危险!)
git replace # 替换对象
归档
git archive --format=zip HEAD > project.zip # 打包
🆘 帮助与调试
git help # 查看命令帮助
git -h # 查看简要帮助
git reflog # 查看操作记录
git fsck # 检查仓库完整性
git gc # 垃圾回收
git verify-commit # 验证GPG签名
💡 实用别名示例
添加到 ~/.gitconfig
alias
co = checkout
br = branch
ci = commit
st = status
unstage = reset HEAD --
last = log -1 HEAD
lg = log --oneline --graph --decorate
hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
type = cat-file -t
dump = cat-file -p
🎨 美化输出
彩色输出
git config --global color.ui auto
自定义log格式
git log --pretty=format:'%C(yellow)%h %C(cyan)%ad %C(green)%an %Creset%s' --date=short
📋 常用工作流
典型开发流程
git clone # 克隆项目
git checkout -b feature # 创建功能分支
... 开发 ...
git add . # 添加修改
git commit -m "添加功能" # 提交
git push origin feature # 推送
创建PR/MR,合并到主分支
更新本地
git checkout main
git pull origin main
git checkout feature
git rebase main # 或 git merge main