Git 是现代软件开发必备的版本控制工具,这里整理了一些实用的 Git 命令和技巧。
基础配置
全局配置
# 设置用户信息git config --global user.name "Your Name"
# 设置默认编辑器git config --global core.editor vim
# 设置默认分支名git config --global init.defaultBranch main
# 查看配置git config --listgit config user.name
SSH 密钥配置
# 生成SSH密钥
# 添加到ssh-agenteval "$(ssh-agent -s)"ssh-add ~/.ssh/id_rsa
# 测试连接
仓库操作
初始化和克隆
# 初始化仓库git initgit init --bare # 创建裸仓库
# 克隆仓库git clone https://github.com/user/repo.gitgit clone --depth 1 repo.git # 浅克隆,只获取最新提交git clone -b branch_name repo.git # 克隆指定分支
远程仓库管理
# 查看远程仓库git remote -v
# 添加远程仓库git remote add origin https://github.com/user/repo.gitgit remote add upstream https://github.com/original/repo.git
# 修改远程仓库URL
# 删除远程仓库git remote remove origin
分支管理
分支操作
# 查看分支git branch # 本地分支git branch -r # 远程分支git branch -a # 所有分支
# 创建分支git branch feature-branchgit checkout -b feature-branch # 创建并切换git switch -c feature-branch # 新语法
# 切换分支git checkout maingit switch main # 新语法
# 删除分支git branch -d feature-branch # 删除已合并分支git branch -D feature-branch # 强制删除分支git push origin --delete feature-branch # 删除远程分支
分支合并
# 合并分支git merge feature-branchgit merge --no-ff feature-branch # 禁用快进合并
# 变基合并git rebase maingit rebase -i HEAD~3 # 交互式变基,合并最近3个提交
# 解决冲突git status# 编辑冲突文件git add .git commit
提交管理
基本提交
# 添加文件git add file.txtgit add . # 添加所有文件git add -A # 添加所有变更git add -p # 交互式添加
# 提交git commit -m "提交信息"git commit -am "提交信息" # 添加并提交已跟踪文件git commit --amend # 修改最后一次提交
查看历史
# 查看提交历史git loggit log --oneline # 简洁格式git log --graph # 图形化显示git log --stat # 显示文件变更统计git log -p # 显示详细差异
# 查看特定文件历史git log -- file.txtgit log --follow -- file.txt # 跟踪重命名
# 查看分支图git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
撤销和重置
撤销修改
# 撤销工作区修改git checkout -- file.txtgit restore file.txt # 新语法
# 撤销暂存区修改git reset HEAD file.txtgit restore --staged file.txt # 新语法
# 撤销提交git reset --soft HEAD~1 # 保留修改在暂存区git reset --mixed HEAD~1 # 保留修改在工作区(默认)git reset --hard HEAD~1 # 完全删除修改
回退版本
# 查看提交IDgit log --oneline
# 回退到指定提交git reset --hard commit_idgit revert commit_id # 创建新提交来撤销
# 恢复删除的提交git refloggit reset --hard HEAD@{2}
标签管理
# 创建标签git tag v1.0.0git tag -a v1.0.0 -m "版本1.0.0" # 带注释的标签
# 查看标签git taggit show v1.0.0
# 推送标签git push origin v1.0.0git push origin --tags # 推送所有标签
# 删除标签git tag -d v1.0.0git push origin --delete v1.0.0
实用技巧
暂存工作
# 暂存当前工作git stashgit stash save "工作描述"
# 查看暂存列表git stash list
# 恢复暂存git stash pop # 恢复并删除暂存git stash apply # 恢复但保留暂存git stash apply stash@{1} # 恢复指定暂存
# 删除暂存git stash dropgit stash clear # 清空所有暂存
文件操作
# 重命名文件git mv old_name new_name
# 删除文件git rm file.txtgit rm --cached file.txt # 从版本控制中移除但保留文件
# 忽略文件echo "*.log" >> .gitignoregit add .gitignore
差异比较
# 查看差异git diff # 工作区与暂存区git diff --cached # 暂存区与最后提交git diff HEAD # 工作区与最后提交git diff branch1 branch2 # 比较分支
# 查看文件差异git diff file.txtgit diff HEAD~1 file.txt
高级技巧
交互式变基
# 合并多个提交git rebase -i HEAD~3
# 在编辑器中:# pick -> squash (合并到上一个提交)# pick -> edit (修改提交)# pick -> drop (删除提交)
子模块管理
# 添加子模块git submodule add https://github.com/user/repo.git path/to/submodule
# 初始化子模块git submodule initgit submodule update
# 克隆包含子模块的仓库git clone --recursive repo.git
# 更新子模块git submodule update --remote
钩子脚本
# 预提交钩子示例 (.git/hooks/pre-commit)#!/bin/bash# 运行代码检查npm run lintif [ $? -ne 0 ]; then echo "代码检查失败,提交被阻止" exit 1fi
团队协作
工作流程
# 功能分支工作流git checkout -b feature/new-feature# 开发功能git add .git commit -m "添加新功能"git push origin feature/new-feature# 创建Pull Request
# 同步主分支git checkout maingit pull origin maingit checkout feature/new-featuregit rebase main
代码审查
# 查看他人的分支git fetch origingit checkout -b review-branch origin/feature-branch
# 比较分支差异git diff main..feature-branchgit log main..feature-branch
常用别名配置
# 设置Git别名git config --global alias.st statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.unstage 'reset HEAD --'git config --global alias.last 'log -1 HEAD'git config --global alias.visual '!gitk'
# 复杂别名git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
故障排查
常见问题解决
# 解决合并冲突git status# 编辑冲突文件,删除冲突标记git add .git commit
# 找回丢失的提交git refloggit cherry-pick commit_id
# 修复分离的HEADgit checkout maingit branch temp-branch commit_id # 保存工作
# 清理仓库git gc # 垃圾回收git fsck # 检查仓库完整性
这些 Git 技巧可以帮助你更高效地进行版本控制和团队协作!