Git 指令速查(含常见工作流 + 易错点)
一、初始化与全局设置
# 初始化仓库(已有项目想纳入Git)gitinit# 配置全局用户名/邮箱(提交者信息)gitconfig--globaluser.name"你的名字"gitconfig--globaluser.email"you@example.com"# 推荐:显示彩色 + 简洁日志别名gitconfig--globalcolor.ui autogitconfig--globalalias.lg"log --oneline --graph --decorate --all"二、获取 代码 (clone / remote)
# 1) 首次克隆(HTTPS)gitclone https://gitee.com/owner/repo.git# 2) 首次克隆(SSH,建议常用)gitclone git@gitee.com:owner/repo.git# 3) 查看/添加/修改远端gitremote-vgitremoteaddorigin git@gitee.com:owner/repo.gitgitremote set-url origin git@gitee.com:owner/repo.git三、分支管理(创建/切换/重命名/删除/上游跟踪)
# 查看本地/远程分支gitbranch# 本地gitbranch-a# 本地 + 远程gitbranch-vv# 含上游跟踪信息# 创建分支(基于当前分支)gitbranch feature/x# 直接创建并切换gitcheckout-bfeature/x# 或 2.23+ 新语法(推荐)gitswitch-cfeature/x# 切换已有分支gitcheckout devgitswitch dev# 将本地分支与远程同名分支建立跟踪关系(常用)gitbranch --set-upstream-to=origin/dev dev# 或者首次push时顺便设定上游gitpush-uorigin dev# 分支重命名(当前分支)gitbranch-m新名字# 重命名其它分支gitbranch-m旧名 新名# 删除分支(本地)gitbranch-dfeature/x# 安全删除(已合并)gitbranch-Dfeature/x# 强制删除(未合并)# 删除远程分支gitpush origin--deletefeature/xAI写代码bash四、拉代码(更新本地)
# 拉取最新引用,但不合并(安全、快)gitfetch origingitfetch--all--prune# 多远端或清理已删远程分支# 将远端分支合并到当前分支(生成合并提交)gitpull# 等价于 git fetch + git merge# 将本地提交“重放”到远端最新之上(历史更干净)gitpull--rebase# 更新当前分支到远端devgitpull origin dev建议:团队主干分支(如
dev/main)日常用git pull --rebase,减少无意义的 merge 节点。
五、查看修改与暂存
gitstatus# 看工作区/暂存区状态gitdiff# 看未暂存的改动gitdiff--staged# 看已暂存的改动gitadd<file># 暂存指定文件gitadd.# 暂存当前目录所有改动gitrestore<file># 丢弃工作区改动(危险)gitrestore--staged<file># 从暂存区移回工作区AI写代码bash六、提交与 信息 编写
gitcommit-m"feat: 新增xxx"gitcommit-m"fix: 修复xxx"gitcommit--amend# 修改最近一次提交(包含信息/内容)# 提交规范(推荐)# feat: 新功能# fix: 修Bug# docs: 文档# refactor: 重构(不改功能)# perf: 性能优化# test: 测试# chore/build/ci: 杂项/构建/CI七、 推送 (首次/常规/强推)
# 首次把本地分支推到远端并建立上游gitpush-uorigin feature/x# 常规推送gitpush# 修改了历史(rebase/amend/reset后)需要强推gitpush --force-with-lease# 更安全的强推八、合并与变基(merge / rebase)
# 1) merge:保留分叉历史,简单稳妥gitswitch devgitmerge feature/x# 2) rebase:让历史线性(提交“挪到”目标分支之后)gitswitch feature/xgitrebase dev# 发生冲突后:修完文件 → git add 修冲突的文件 → git rebase --continue# 放弃变基:git rebase --abort九、挑拣提交 / 回滚 / 回退(cherry-pick / revert / reset)
# 1) 挑拣:把某个提交“复制”到当前分支gitlog--onelinegitcherry-pick<commit># 2) Revert(推荐):生成一个“反向提交”来撤销某次提交(保留历史)gitrevert<commit># 3) Reset(危险):移动分支指针(会改历史)gitreset--soft<commit># 仅移动HEAD,保留暂存与工作区gitreset--mixed<commit># 默认,保留工作区,清空暂存gitreset--hard<commit># 工作区也还原(不可逆!请三思)十、暂存工作现场(stash)
gitstash push-m"WIP: 正在做xxx"gitstash listgit stash show-pstash@{0}# 查看内容gitstash pop# 恢复并删除这条stashgitstash apply stash@{2}# 恢复但保留stash记录AI写代码bash十一、查看历史(日志/对比/定位)
gitlg# 前面设置的别名,清爽查看历史gitlog--oneline--graph--decorate--allgitblame path/to/file# 定位每行最后一次修改者gitshow<commit># 查看某个提交详情gitdiff<commit1><commit2># 对比两次提交差异AI写代码bash十二、标签(版本打点)
gittag# 列出标签gittag v1.0.0# 轻量标签gittag-av1.0.0-m"Release 1.0.0"# 附注标签(推荐)gitpush origin v1.0.0git push--tags# 一次性推全部标签十三、子模块(若项目里引用其它仓库)
gitsubmoduleaddgit@gitee.com:owner/libX.git third_party/libXgitsubmodule update--init--recursivegitpull --recurse-submodules十四、常见 工作流 (直接套用)
A) 开新功能 → 提交 → 推远端 → 合并到 dev
gitswitch devgitpull--rebasegitswitch-cfeature/plan-tracker# 开发...gitadd.gitcommit-m"feat: 轨迹跟踪模块初版"gitpush-uorigin feature/plan-tracker#提 PR/MR 或在本地合并:gitswitch devgitpull--rebasegitmerge --no-ff feature/plan-trackergitpushB) 同步远端更新并继续开发(避免冲突)
gitswitch feature/plan-trackergitfetchgitrebase origin/dev# 把本地工作挪到最新dev之后# 解决冲突 → git add … → git rebase --continuegitpush --force-with-leaseC) 紧急修复(从 dev 切分支、修完合回)
gitswitch devgitpull--rebasegitswitch-chotfix/xxx# 修...gitcommit-m"fix: xxx"gitswitch devgitmerge --no-ff hotfix/xxxgitpush