当前位置: 首页 > news >正文

《Git 完整入门教程(零基础到实战)》

Git 完整入门教程(零基础到实战)

一、Git 核心概念

1. 什么是 Git

分布式版本控制系统,用于跟踪文件修改、多人协作、版本回退、代码备份,所有代码本地都有完整仓库,无需联网即可操作。

2. 三大区域

  1. 工作区(Working Directory):本地文件夹,你编辑代码的地方
  2. 暂存区(Stage/Index):临时存放待提交修改,add命令存入
  3. 本地仓库(Repository):永久保存版本快照,commit存入
  4. 远程仓库(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-project

3. 查看文件状态

# 查看所有文件修改状态(最常用)gitstatus# 精简版状态gitstatus-s

标识说明:

  • 红色:工作区未加入暂存
  • 绿色:已加入暂存,等待提交

4. 添加文件到暂存区 git add

# 添加单个文件gitaddindex.html# 添加全部修改文件(不含删除)gitadd.# 添加所有文件(包括删除的文件)gitadd-A# 添加指定后缀文件gitadd*.js

5. 提交暂存区到本地仓库 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--hard5ac213
  • HEAD^:上一个版本
  • HEAD~2:往前2个版本

4. 查看所有历史(包括被回退删除的commit)

gitreflog

五、分支操作(多人协作核心)

1. 分支基础命令

# 查看本地所有分支,* 代表当前分支gitbranch# 查看远程所有分支gitbranch-r# 创建新分支gitbranch dev# 切换到dev分支gitcheckout dev# 创建并直接切换分支(最常用)gitcheckout-bfeature/login# 删除本地分支(分支已合并才能删)gitbranch-ddev# 强制删除未合并分支gitbranch-Ddev

2. 合并分支 merge

场景:开发分支写完,合并到主分支 main

# 1. 切换到主分支gitcheckout main# 2. 合并dev分支代码到maingitmerge dev
冲突解决

两个分支修改了同一文件同一行,会提示冲突:

  1. 打开冲突文件,删除<<<<<< HEAD=====>>>>>> 分支名标记
  2. 保留需要的代码,保存文件
  3. 重新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 origin

2. 推送本地代码到远程 git push

# 首次推送,关联本地main分支和远程maingitpush-uorigin main# 后续直接推送gitpush origin main# 推送所有本地分支gitpush--allorigin# 推送标签gitpush origin--tags

3. 拉取远程最新代码

# 拉取远程代码并自动合并(=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

九、多人协作完整标准流程

  1. 拉取主分支最新代码
gitcheckout maingitpull origin main
  1. 创建开发分支开发功能
gitcheckout-bfeature/register
  1. 写完代码提交本地
gitadd.gitcommit-m"完成注册页面"
  1. 推送开发分支到远程
gitpush-uorigin feature/register
  1. 远程仓库提交 Pull Request/Merge Request,代码评审
  2. 评审通过后合并到 main 分支
  3. 本地切换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 哈希

十一、常见问题解决

  1. 推送报错:远程有本地没有的代码
    git pull拉取合并,再 push
  2. 忘记写commit备注,修改上一次提交
    git commit --amend
  3. 本地多提交合并成一条(提交MR前整理记录)
    git rebase -i HEAD~3合并最近3次提交
  4. 误提交敏感文件到仓库
    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--oneline

3. 修改文件、二次提交

echo"add new line">>index.txtgitadd.gitcommit-m"更新文本内容"gitlog--oneline

4. 分支练习

# 创建并切换dev分支gitcheckout-bdevecho"dev分支内容">dev.txtgitadd.gitcommit-m"dev分支新增文件"# 切回主分支gitcheckout main# 合并dev到maingitmerge dev

5. 回退版本演示

# 查看历史记录,复制前面7位hashgitlog--oneline# 软回退(保留修改)gitreset HEAD^# 彻底清空修改回退# git reset --hard HEAD^

6. 关联远程仓库上传代码

  1. Gitee/Github 新建空仓库,复制仓库地址
# 绑定远程gitremoteaddorigin shturl.cc/aXMa9S8HauLqkUkKBYDJ6Zc6# 首次推送关联分支gitpush-uorigin main

附录三、高频小技巧

  1. 修改上一次提交备注
gitcommit--amend
  1. 清空所有未提交修改
gitcheckout --.
  1. 取消已add的文件
gitreset HEAD.
  1. 拉取远程代码不自动合并
gitfetchgitmerge origin/main

需要我把这份教程压缩成一页Git速记命令清单方便你保存吗?

http://www.jsqmd.com/news/1387920/

相关文章:

  • PKC 第 119 个开关:解析作品文案的位置、验证方法与风险边界
  • 跨部门协作靠领导催怎么破?华恒智信成功案例
  • 编写一个字符设备驱动
  • 什么是快消品ERP系统?一篇讲透定义、核心模块与经销商选型标准
  • 做网站建设项目策划书:从0到1的深度实战指南与避坑建议
  • 揭秘潍坊网站建设价格背后,为何有人花5000元有人花5万?内行不说真话
  • C语言转义字符全解析:从原理到实战应用与安全陷阱
  • 深度解析:无锡网站建设mkdns优化策略如何助力中小企业实现数字突围
  • 电瓶车可以寄快递吗?2026年电动车托运全攻略,这样寄才不被坑 - 快递物流资讯
  • C++ RAII技术:资源管理的核心原理与实践
  • AI智能体安全开发实战:从权限失控到架构加固
  • AI是玩具还是生产力?
  • PKC 第 118 个开关:关闭弹窗解析的位置、验证方法与风险边界
  • openclaw源码解读(5)——server.impl.ts 真正的启动引擎 第三阶段:网络栈启动(HTTP + WS)
  • 为什么很多学网安的人,最后都转行了?揭露网安新人淘汰的4个隐形真相
  • AI科研工具精选:提升学术效率的10款实用推荐
  • 河北网站建设多少钱?揭秘价格背后的真实逻辑与避坑指南
  • 自己编译EDK2 ARM版固件并用qemu安装Windows On ARM系统
  • 【Bug已解决】[Build] 1.27.0 on PyPI but no release tag or notes on github 解决方案
  • 学历不好能不能学网安?彻底讲透网安学历歧视与真实就业现状
  • Ubuntu 20.04录屏与剪辑全流程:从SSR录制到kdenlive剪辑实战
  • Java线上服务CPU与内存异常排查:从监控到代码的完整实战指南
  • 【研发类-架构设计Skills】cloud-architect 技能
  • 储水式电热水器选购指南:从能效、功率到安全技术的深度解析
  • 音乐怎么改成MP3格式?5种转换方法实测,看看你适合哪一种!
  • 多账号SSH配置与管理实战指南
  • 避免数据库回填:数据模式演进的设计思维与工程实践
  • 2026年杭州企业选择GEO优化公司必读:五家服务商横向评测与避坑指南 - 品牌报告
  • 三步搞定表情字体统一显示:EmojiOne Color 安装与 Web 引入完整指南
  • 手机版ChatGPT里复制代码怎么用?AI导出鸭鸿蒙版批量导出无损搞定