《Git 完整入门教程(零基础到实战)》
Git 完整入门教程(零基础到实战)
一、Git 核心概念
1. 什么是 Git
分布式版本控制系统,用于跟踪文件修改、多人协作、版本回退、代码备份,所有代码本地都有完整仓库,无需联网即可操作。
2. 三大区域
- 工作区(Working Directory):本地文件夹,你编辑代码的地方
- 暂存区(Stage/Index):临时存放待提交修改,
add命令存入 - 本地仓库(Repository):永久保存版本快照,
commit存入 - 远程仓库(Github/Gitee/GitLab):云端共享仓库
3. 核心名词
commit:版本快照,每次提交生成唯一哈希值branch:分支,并行开发互不干扰master/main:默认主分支(新版 Git 默认 main)HEAD:指针,指向当前所在版本/分支remote:远程仓库地址
二、安装与配置
1. 下载安装
官网:https://git-scm.com/
Windows:安装后打开Git Bash
Mac:brew install git
Linux:apt install git
2. 全局基础配置(仅第一次配置)
# 设置用户名(提交记录显示)gitconfig--globaluser.name"你的名字"# 设置邮箱(和Github/Gitee注册邮箱一致)gitconfig--globaluser.email"你的邮箱"# 查看全局配置gitconfig--global--list# 查看单条配置gitconfig user.name三、本地仓库基础操作(核心命令)
方式1:新建项目初始化 Git
# 进入项目文件夹cd/你的项目路径# 初始化git仓库,生成隐藏文件夹 .gitgitinit方式2:拉取远程已有项目到本地
# 克隆远程仓库到本地gitclone shturl.cc/IpuQuTE2ZckLNunKsDB# 克隆并重命名本地文件夹gitclone https://github.com/xxx/xxx.git my-project3. 查看文件状态
# 查看所有文件修改状态(最常用)gitstatus# 精简版状态gitstatus-s标识说明:
- 红色:工作区未加入暂存
- 绿色:已加入暂存,等待提交
4. 添加文件到暂存区 git add
# 添加单个文件gitaddindex.html# 添加全部修改文件(不含删除)gitadd.# 添加所有文件(包括删除的文件)gitadd-A# 添加指定后缀文件gitadd*.js5. 提交暂存区到本地仓库 git commit
# 基础提交,-m 填写版本说明(必须写清楚修改内容)gitcommit-m"首页新增轮播组件"# 跳过add,直接提交所有已跟踪文件修改(不包含新增文件)gitcommit-am"修复登录bug"6. 查看提交日志
# 完整日志gitlog# 简洁单行日志gitlog--oneline# 图形化分支日志gitlog--oneline--graph# 查看指定文件修改记录gitlog index.js四、撤销、回退操作(高频踩坑)
1. 撤销工作区修改(未add)
文件改坏了,恢复成上次提交的版本
# 单个文件gitcheckout -- index.html# 全部文件gitcheckout --.2. 取消暂存(已add,未commit)
文件add错了,移出暂存区,回到工作区
gitreset HEAD index.html# 全部文件取消暂存gitreset HEAD.3. 版本回退(已commit)
# 回退到上一个版本,保留本地修改gitreset HEAD^# 回退到指定commit哈希值gitreset 5ac213# 彻底回退,清空工作区所有修改(谨慎!)gitreset--hardHEAD^gitreset--hard5ac213HEAD^:上一个版本HEAD~2:往前2个版本
4. 查看所有历史(包括被回退删除的commit)
gitreflog五、分支操作(多人协作核心)
1. 分支基础命令
# 查看本地所有分支,* 代表当前分支gitbranch# 查看远程所有分支gitbranch-r# 创建新分支gitbranch dev# 切换到dev分支gitcheckout dev# 创建并直接切换分支(最常用)gitcheckout-bfeature/login# 删除本地分支(分支已合并才能删)gitbranch-ddev# 强制删除未合并分支gitbranch-Ddev2. 合并分支 merge
场景:开发分支写完,合并到主分支 main
# 1. 切换到主分支gitcheckout main# 2. 合并dev分支代码到maingitmerge dev冲突解决
两个分支修改了同一文件同一行,会提示冲突:
- 打开冲突文件,删除
<<<<<< HEAD、=====、>>>>>> 分支名标记 - 保留需要的代码,保存文件
- 重新
git add .+git commit -m "解决合并冲突"
3. 变基 rebase(整洁提交记录)
# 在dev分支,把main最新代码合并过来,线性提交记录gitcheckout devgitrebase main六、远程仓库(Github/Gitee 上传拉取)
1. 绑定远程仓库
# 添加远程仓库,origin是远程仓库默认别名gitremoteaddorigin shturl.cc/3pl8KsCRNnbt15LLGxOz# 查看已绑定远程gitremote-v# 修改远程地址(仓库迁移时用)gitremote set-url origin 新仓库地址# 删除远程绑定gitremote remove origin2. 推送本地代码到远程 git push
# 首次推送,关联本地main分支和远程maingitpush-uorigin main# 后续直接推送gitpush origin main# 推送所有本地分支gitpush--allorigin# 推送标签gitpush origin--tags3. 拉取远程最新代码
# 拉取远程代码并自动合并(=fetch + merge)gitpull origin main# 仅下载远程代码,不合并gitfetch origin# 手动合并gitmerge origin/main七、忽略文件 .gitignore
项目根目录新建.gitignore,写入不需要Git跟踪的文件,示例模板:
# 系统缓存 .DS_Store Thumbs.db # 依赖文件夹 node_modules/ venv/ dist/ build/ # 环境配置、密钥 .env *.pem config.local.js # 日志 *.log # IDE缓存 .idea/ .vscode/ *.swp注意:文件已经被git跟踪后,再写进ignore不会生效,需要先删除缓存:
git rm --cached 文件名
八、标签 tag(版本发布 v1.0.0)
# 创建轻量标签gittag v1.0.0# 创建带说明的标签gittag-av1.0.0-m"正式1.0版本发布"# 查看所有标签gittag# 推送单个标签到远程gitpush origin v1.0.0# 推送全部标签gitpush origin--tags# 删除本地标签gittag-dv1.0.0# 删除远程标签gitpush origin :v1.0.0九、多人协作完整标准流程
- 拉取主分支最新代码
gitcheckout maingitpull origin main- 创建开发分支开发功能
gitcheckout-bfeature/register- 写完代码提交本地
gitadd.gitcommit-m"完成注册页面"- 推送开发分支到远程
gitpush-uorigin feature/register- 远程仓库提交 Pull Request/Merge Request,代码评审
- 评审通过后合并到 main 分支
- 本地切换main,拉取合并后的最新代码
gitcheckout maingitpull origin main十、常用高频速查表
| 功能 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 克隆仓库 | git clone 地址 |
| 查看状态 | git status |
| 加入暂存 | git add . |
| 提交版本 | git commit -m “备注” |
| 查看日志 | git log --oneline |
| 创建切换分支 | git checkout -b xxx |
| 合并分支 | git merge xxx |
| 绑定远程 | git remote add origin 地址 |
| 推送代码 | git push origin main |
| 拉取代码 | git pull origin main |
| 撤销工作区修改 | git checkout – . |
| 彻底回退版本 | git reset --hard 哈希 |
十一、常见问题解决
- 推送报错:远程有本地没有的代码
先git pull拉取合并,再 push - 忘记写commit备注,修改上一次提交
git commit --amend - 本地多提交合并成一条(提交MR前整理记录)
git rebase -i HEAD~3合并最近3次提交 - 误提交敏感文件到仓库
用git filter-repo彻底清除历史记录
附录一、通用 .gitignore 完整模板(直接复制保存为项目根目录.gitignore)
# 系统文件 .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db # IDE 缓存 .idea/ .vscode/ *.suo *.ntvs* *.njsproj *.sln *.sw? *.swp *~ # 前端 Node node_modules/ npm-debug.log* yarn-debug.log* yarn-error.log* .pnpm-debug.log* dist/ build/ coverage/ .vercel .turbo # Python __pycache__/ *.pyc *.pyo *.pyd venv/ env/ *.env .env.local .env.development .env.production # Java target/ *.class *.jar *.war *.log .gradle build/ out/ # C/C++ cmake-build-*/ *.o *.exe *.dll *.so *.out # 日志 *.log logs/ # 密钥、配置 *.pem *.key secret.json config.local.yaml # 压缩包 *.zip *.rar *.7z *.tar.gz附录二、Git 实操练习流程(跟着敲一遍就能吃透)
1. 初始化本地仓库
# 新建文件夹并进入mkdirgit-democdgit-demo# 初始化gitgitinit# 配置用户名邮箱(仅第一次执行)gitconfig user.name"test"gitconfig user.email"test@163.com"2. 创建文件、跟踪提交
# 创建文件echo"hello git">index.txt# 查看状态(红色未暂存)gitstatus# 添加到暂存区gitaddindex.txt# 提交本地仓库gitcommit-m"第一次提交:新增index.txt"# 查看提交记录gitlog--oneline3. 修改文件、二次提交
echo"add new line">>index.txtgitadd.gitcommit-m"更新文本内容"gitlog--oneline4. 分支练习
# 创建并切换dev分支gitcheckout-bdevecho"dev分支内容">dev.txtgitadd.gitcommit-m"dev分支新增文件"# 切回主分支gitcheckout main# 合并dev到maingitmerge dev5. 回退版本演示
# 查看历史记录,复制前面7位hashgitlog--oneline# 软回退(保留修改)gitreset HEAD^# 彻底清空修改回退# git reset --hard HEAD^6. 关联远程仓库上传代码
- Gitee/Github 新建空仓库,复制仓库地址
# 绑定远程gitremoteaddorigin shturl.cc/aXMa9S8HauLqkUkKBYDJ6Zc6# 首次推送关联分支gitpush-uorigin main附录三、高频小技巧
- 修改上一次提交备注
gitcommit--amend- 清空所有未提交修改
gitcheckout --.- 取消已add的文件
gitreset HEAD.- 拉取远程代码不自动合并
gitfetchgitmerge origin/main需要我把这份教程压缩成一页Git速记命令清单方便你保存吗?