WD
Classnote Docs课程课件
01

Git 版本控制工具

学习目标:

  • 理解 Git 的作用,并能说清它解决了什么问题
  • 掌握 Git 的核心流程(工作区、暂存区、本地仓库、远程仓库)
  • 熟练完成 add、commit、push、pull 等基础操作
  • 学会处理常见的协作冲突与版本回退场景
  • 理解分支的价值,并能完成基础分支管理操作
  • 能在 IDEA 中完成常见 Git 操作

本章重点:

  • Git 的三区模型与文件状态流转
  • clone / status / add / commit / push / pull 的完整链路
  • 冲突处理的步骤与常见误区
  • reset / checkout / reflog 等“后悔药”的适用场景
  • 分支管理与企业协作中的基本工作流
01 / Section

1. Git介绍

1.1 Git的诞生

Git 是由 Linus Torvalds(Linux之父)开发的第二个伟大作品。2005年,由于BitKeeper软件公司对Linux社区停止了免费使用权,Linus迫不得已自己开发了一个分布式版本控制工具。据说Linus花了两周时间用C语言写了一个分布式版本控制系统,这就是Git。一个月之内,Linux系统的源码已经由Git管理了。

1.2 什么是Git

Git 是一个版本控制工具,可以记录和追踪某个文件在某一个时刻的内容和状态。

Git的使用有点像一个"网盘",但这个网盘比网盘更高级——Git可以追踪"网盘"中文件的历史版本状态

🔑 核心理解:Git 可以记录某个文件夹下的不同文件在不同时间节点的不同状态,并追踪这些文件产生的变化。

1.3 Git的特点

特点 说明
分布式 每个开发者本地都有完整的仓库副本
离线可用 大部分操作可以在本地完成,无需联网
可回退 可以随时回滚到任意历史版本

1.4 Git vs SVN 对比

对比项 SVN(集中式) Git(分布式)
架构 中央服务器 + 客户端 每个节点都是完整仓库
网络依赖 提交、更新都需要联网 本地操作无需联网
数据安全 中央服务器挂掉有风险 每个节点都有完整备份
分支操作 分支是目录的拷贝,较重 轻量级分支,快速切换
集中式vs分布式
集中式vs分布式

💡 注意:学会了Git,SVN也会很容易上手,因为基本命令类似。

本章小结

本章核心概念:Git 的核心价值在于分布式、可追踪、可回退。它不只是“代码备份工具”,更是团队协作开发的基础设施。

你现在应该掌握

  • 能说清 Git 与 SVN 的核心差异
  • 能解释 Git 为什么适合团队协作开发
  • 能理解“版本控制”到底控制的是什么内容
02 / Section

2. Git安装

2.1 下载Git

Git下载页面
Git下载页面

2.2 安装步骤

Windows系统直接傻瓜式安装即可,安装过程中注意以下几点:

  1. 选择编辑器:建议选择VS Code或Notepad++作为默认编辑器
  2. 调整PATH环境:选择"Git from the command line and also from 3rd-party software"
  3. HTTPS传输后端:选择OpenSSL库
  4. 行尾符转换:Windows用户建议选择"Checkout Windows-style, commit Unix-style line endings"
  5. 记住登录凭证:勾选让Windows记住登录凭证(方便后续操作)
安装选项
安装选项

2.3 验证安装

安装完成后,打开命令行验证:

bash
git --version

正常输出版本号(如 git version 2.40.0)表示安装成功。

本章小结

本章核心概念:Git 安装的关键不是“点完下一步”,而是安装后能立即使用,并知道如何验证环境是否可用。

你现在应该掌握

  • 能独立完成 Git 的基础安装
  • 能通过 git --version 验证安装结果
  • 能说出安装过程中几个关键选项的意义
03 / Section

3. Git核心流程

3.1 Git工作区域

Git管理文件有三个核心区域

diagram
Git工作流程 工作区 (Working Directory) 新建文件 修改文件 删除文件 git add 暂存区 (Staging Area / Index) git commit 本地仓库 (Local Repository) git push 远程仓库 (Remote Repository)
┌─────────────────────────────────────────────────────────┐
│                     Git工作流程                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│   工作区 (Working Directory)                             │
│   ├── 新建文件    ──────┐                               │
│   ├── 修改文件         │                               │
│   └── 删除文件         │   git add                     │
│                        ▼                               │
│   暂存区 (Staging Area / Index)                          │
│                        │                               │
│                        │   git commit                  │
│                        ▼                               │
│   本地仓库 (Local Repository)                            │
│                        │                               │
│                        │   git push                    │
│                        ▼                               │
│   远程仓库 (Remote Repository)                           │
│                                                         │
└─────────────────────────────────────────────────────────┘

三个区域详解

区域 英文 说明
工作区 Working Directory 你电脑上实际看到的文件目录
暂存区 Staging Area / Index 临时存放修改的地方,.git/index
本地仓库 Local Repository Git存储版本数据的地方,.git/目录
远程仓库 Remote Repository 如GitHub、Gitee等服务器上的仓库
Git核心流程
Git核心流程

3.2 文件状态流转

diagram
未追踪(Untracked) 已暂存(Staged) 已提交(Committed) 修改后重新add
未追踪(Untracked) ──────► 已暂存(Staged) ──────► 已提交(Committed)
                            ▲                      │
                            │                      │
                            └──── 修改后重新add ◄──┘

本章小结

本章核心概念:Git 的核心流程本质上是“记录变化并生成版本”。只有变化进入暂存区并提交到仓库,才真正形成可追踪的版本历史。

你现在应该掌握

  • 能说清工作区、暂存区、本地仓库、远程仓库的关系
  • 能画出 add → commit → push 的完整流程
  • 能解释为什么“改了文件不等于保存了版本”
04 / Section

4. Git基础命令

4.1 注册远程仓库平台

以Gitee(码云)为例,国内访问速度快:

  1. 访问 https://gitee.com 注册账号
  2. 注册时请记住:
  • 用户名(推荐使用英文)
  • 密码
  • 手机号
  • 邮箱(可以注册后自行设置)

⚠️ 重要:密码一定要牢记,后续push代码时需要验证。

4.2 创建远程仓库

登录Gitee后,点击右上角"+"号创建仓库:

创建仓库
创建仓库

创建时建议:

  • 仓库名称使用英文
  • 选择公开或私有(初学者建议公开)
  • 勾选"初始化仓库"和"添加README.md"
  • 勾选"添加.gitignore"(Java项目选Java模板)

4.3 git clone - 克隆仓库

将远程仓库下载到本地(首次使用必须操作):

bash
# 方式1:下载远程仓库,本地创建同名文件夹
git clone https://gitee.com/common-zhou/test_50th.git

# 方式2:指定本地文件夹名称
git clone https://gitee.com/common-zhou/test_53th.git test_53th_local

# 方式3:克隆到当前目录的指定文件夹(文件夹必须为空或不存在)
git clone https://gitee.com/ciggar/test-40th.git dirName

💡 提示:克隆后会自动创建.git文件夹(Git元信息目录),不要手动修改或删除

⚠️ 文件类型注意事项

Git管理文件版本,推荐使用文本文件

  • .txt.md.java.xml
  • ❌ 避免使用 .docx.pptx.xlsx 等二进制格式

Git对比文件变化是一行一行比较的,.docx等是压缩包格式,无法有效对比差异。

4.4 git status - 查看状态

查看工作区和暂存区的变化:

bash
git status

输出说明:

  • 🔴 红色:工作区有变化(未添加到暂存区)
  • 🟢 绿色:暂存区有变化(已add未commit)
status示例
status示例

简化输出(推荐日常使用):

bash
git status -s
# 或
git status --short

4.5 git add - 添加到暂存区

将工作区的变化提交到暂存区:

bash
# 方式1:添加指定文件
git add filename.txt
git add src/Main.java

# 方式2:通配符添加
git add *.java          # 所有.java文件
git add src/*           # src目录下所有文件
git add src/**/*.java   # src及其子目录下所有.java文件

# 方式3:添加所有变化(最常用)
git add .

# 方式4:交互式添加(选择性添加)
git add -i

💡 实战建议:日常开发中,git add . 最常用,但要注意.gitignore的配置。

4.6 git commit - 提交到本地仓库

将暂存区的内容提交到本地仓库,生成一个版本:

bash
# 基础提交
git commit -m "提交信息"

# 添加并提交(跳过git add)
git commit -am "提交信息"

# 修改最后一次提交(未push前)
git commit --amend -m "新的提交信息"

⚠️ 首次提交配置

第一次commit前,必须设置用户名和邮箱

bash
# 方式1:命令行设置(推荐)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 方式2:直接编辑配置文件
# Windows: C:\Users\用户名\.gitconfig
# Linux/Mac: ~/.gitconfig

配置文件内容示例:

ini
[user]
    name = stone
    email = shitou@cskaoyan.com

📝 提交信息规范

良好的提交信息应该一目了然:

bash
# 推荐格式
git commit -m "功能描述 (issue编号)"

# 示例
git commit -m "修复用户登录bug (#123)"
git commit -m "添加HashMap练习代码"
git commit -m "优化数据库查询性能"

# ❌ 不好的示例
git commit -m "1"
git commit -m "abc"
git commit -m "修改"

提交信息模板

text
<type>(<scope>): <subject>

<body>

<footer>

常用type:

  • feat:新功能
  • fix:修复bug
  • docs:文档修改
  • style:格式修改(不影响代码逻辑)
  • refactor:重构
  • test:测试相关

4.7 git push - 推送到远程

将本地仓库的所有变化推送到远程仓库:

bash
# 推送到默认远程分支
git push

# 推送到指定远程仓库的指定分支
git push origin main
git push origin master

# 首次推送并建立追踪关系
git push -u origin main
push示例
push示例

⚠️ push重要说明

  1. 第一次push需要验证身份:输入用户名和密码(或Token)
身份验证
身份验证
  1. push不能指定单个文件,只能推送整个分支
  1. push的前提:本地仓库版本必须领先于远程仓库(或已合并远程更新)

4.8 git pull - 拉取更新

将远程仓库的最新变化拉取到本地:

bash
git pull
pull示例
pull示例

🔄 pull的本质

git pull = git fetch + git merge

bash
# 等价于
git fetch origin        # 下载远程更新
git merge origin/main   # 合并到当前分支

💡 黄金法则:"落后就要pull"——当本地版本落后于远程时,必须先pull才能push。

4.9 git log - 查看历史

查看仓库的版本历史:

bash
# 基础查看
git log

# 简化输出(推荐)
git log --oneline

# 图形化显示分支
git log --oneline --graph --all

# 查看最近n条
git log -5

# 查看指定文件的历史
git log -- filename.txt
log示例
log示例

本章小结

本章核心概念:Git 的基础命令不是孤立记忆的,而是围绕“查看状态、记录变化、同步远程、查看历史”这一整条操作链使用的。

你现在应该掌握

  • 能在真实仓库中完成 clone、status、add、commit、push、pull
  • 能根据 git status 判断当前文件处于什么状态
  • 能用 git log --oneline 快速查看版本历史
05 / Section

5. 协作开发与冲突处理

5.1 邀请成员加入仓库

无论是开源仓库还是私有仓库,只有仓库成员才能修改代码

  • 开源仓库:所有人可见,但只有成员可修改
  • 私有仓库:只有指定成员可见和修改

添加成员步骤

邀请成员
邀请成员

⚠️ 注意:Gitee私有仓库免费版只能添加5个管理员(含主账号)。如需添加更多成员,可将仓库设为公开。

5.2 冲突的产生

当多个开发者同时修改同一文件的同一部分时,就会产生冲突。

冲突产生场景

text
开发者A                    开发者B
   │                          │
   ├─修改file.txt─────────────┤
   │                          ├─修改file.txt
   ├─push成功───────────────┤
   │                          ├─push失败(冲突!)
   │                          ├─pull下来
   │◄─────────────────────────┤
   │         冲突产生          │

💡 冲突处理黄金法则

  1. 先push的人不处理冲突,后push的人处理冲突
  2. 尽量避免多人同时修改同一文件
  3. push之前先pull,防止push失败
  4. 工作习惯
  • ☀️ 早上上班第一件事:pull最新代码
  • 🌙 晚上下班最后一件事:push本地代码(确保能编译通过

5.3 冲突处理实战

模拟冲突场景

冲突流程
冲突流程

冲突文件示例

当发生冲突时,Git会在文件中标记冲突内容:

java
<<<<<<<< HEAD
    // 你的本地代码
    System.out.println("我的版本");
================
    // 远程仓库的代码  
    System.out.println("同事的版本");
>>>>>>>> a3f8b2c

标记说明

  • <<<<<<< HEAD=======:你的本地代码
  • =======>>>>>>> a3f8b2c:远程的代码(commit hash)

冲突处理步骤

bash
# 1. 执行pull,Git会自动合并,发生冲突时标记冲突文件
git pull

# 2. 手动编辑冲突文件,决定保留哪些代码
#    - 保留你的代码?删除远程部分
#    - 保留同事的代码?删除你的部分
#    - 两者都要?合并修改

# 3. 删除冲突标记(<<<<<<< ======= >>>>>>>)

# 4. 保存文件后,添加到暂存区
git add .

# 5. 提交解决冲突的代码
git commit -m "解决与同事的代码冲突"

# 6. 尽快push,防止别人又push了新代码
git push

本章小结

本章核心概念:协作开发的关键不是“完全没有冲突”,而是知道冲突为什么出现、如何定位、如何正确解决。

你现在应该掌握

  • 能说清冲突通常在什么场景下发生
  • 能识别冲突标记并手动处理冲突内容
  • 能理解“先 pull 再 push”在团队协作中的意义
06 / Section

6. 后悔药 - 版本回退

Git提供了多种"后悔药",可以在不同场景下回退操作。

后悔药流程
后悔药流程

6.1 git checkout - 撤销工作区修改

作用:用暂存区或仓库中的文件覆盖工作区的文件

bash
# 撤销单个文件的修改
git checkout filename.txt

# 撤销所有文件的修改(危险操作!)
git checkout .

⚠️ 危险警告:此操作会丢失工作区的所有修改,无法恢复,请谨慎使用!

适用场景

  • 写了一半发现思路错了,想回到修改前的状态
  • 误删了文件,想从仓库恢复

6.2 git reset - 撤销暂存区

作用:将暂存区的变化回退到工作区(不会改变文件内容

bash
# 取消暂存区中指定文件
git reset HEAD filename.txt

# 取消所有暂存(保留工作区修改)
git reset HEAD .

# 或简写
git reset .

适用场景

  • git add 错了文件,想重新选择
  • 想拆分一个大的commit为多个小的

6.3 git reset --hard - 彻底回退版本

作用:将当前分支重置到指定版本,会清除工作区和暂存区的所有更改

bash
# 回退到指定commit(通过hash)
git reset --hard a3f8b2c

# 回退到上一个版本
git reset --hard HEAD^

# 回退到上n个版本
git reset --hard HEAD~3

⚠️ 极度危险:此操作会丢失所有未提交的更改,请确保真的不需要这些更改!

reset示例
reset示例

找回丢失的commit

bash
# 查看所有操作记录
git reflog

# 恢复到之前的版本
git reset --hard <commit_hash>

本章小结

本章核心概念:Git 的“后悔药”本质上是对不同区域和不同历史状态的回退操作,理解作用范围比死记命令更重要。

你现在应该掌握

  • 能区分 checkout、reset、reset --hard 的适用场景
  • 能判断哪类操作只影响暂存区,哪类会影响工作区和历史版本
  • 知道误操作后可以先尝试用 reflog 自救
07 / Section

7. 忽略文件 .gitignore

7.1 什么是.gitignore

Git可以配置忽略某些文件或目录,不追踪它们的变化。这在项目中非常重要,比如:

  • IDE配置文件(.idea/
  • 编译生成的文件(target/*.class
  • 依赖库(node_modules/
  • 敏感信息(配置文件含密码)

7.2 创建.gitignore

在Git仓库根目录创建.gitignore文件:

bash
# 创建文件(Windows需要在命令行创建,因为文件名以点开头)
touch .gitignore

7.3 Java项目常用.gitignore模板

gitignore
# 编译输出
*.class
target/
build/
out/

# IDE配置
.idea/
*.iml
*.ipr
*.iws
.vscode/
*.project
*.classpath
.settings/

# 包文件
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar

# 日志
*.log
logs/

# 临时文件
*.tmp
*.temp
*.swp
*~

# 操作系统文件
.DS_Store
Thumbs.db

# Maven
.mvn/

# Gradle
.gradle/

7.4 常用匹配规则

gitignore
# 忽略单个文件
filename.txt

# 忽略目录
foldername/

# 忽略所有.class文件
*.class

# 不忽略某个特定的.class(取反)
!important.class

# 忽略target目录下的所有内容
target/*

# 忽略所有名为temp的目录
**/temp/

7.5 ⚠️ 重要注意事项

  1. 尽早创建.gitignore最好在创建远程仓库时就配置好
创建时添加
创建时添加
  1. 已追踪文件无效如果一个文件已经被追踪并提交到远程仓库,再在.gitignore中忽略是无效的
bash
   # 解决方案:先从仓库移除(保留本地文件)
   git rm --cached filename
   git commit -m "停止追踪某文件"

本章小结

本章核心概念.gitignore 的本质是“让 Git 不去追踪不该纳入版本管理的内容”,它是保持仓库整洁的重要规则文件。

你现在应该掌握

  • 知道 .gitignore 应该放在仓库根目录
  • 知道为什么越早配置越好
  • 知道对已追踪文件,单纯写入 .gitignore 并不会立即生效
08 / Section

8. Git分支管理

8.1 什么是分支

Git分支是版本控制中的重要概念,用于在同一仓库中独立开发多个功能。

分支的好处

  • 多人并行开发,互不干扰
  • 新功能开发不影响主分支
  • 可随时回退到之前的状态
  • 支持版本发布和bug修复并行

分支类型

  • 主分支(master/main):稳定版本,用于发布
  • 开发分支(dev):日常开发,合并新功能
  • **功能分支(feature/*)**:开发特定功能
  • **修复分支(hotfix/*)**:紧急修复线上bug

8.2 基础分支命令

bash
# 查看本地分支
git branch

# 查看所有分支(含远程)
git branch -a

# 查看分支关系(追踪关系)
git branch -vv

# 创建新分支
git branch 分支名

# 创建并切换到新分支(常用)
git checkout -b 新分支名
# Git 2.23+ 推荐:
git switch -c 新分支名

# 切换分支
git checkout 分支名
# Git 2.23+ 推荐:
git switch 分支名

# 合并分支
git merge 被合并的分支名

# 删除分支
git branch -d 分支名        # 已合并的分支
git branch -D 分支名        # 强制删除

8.3 分支工作流实战

典型企业分支模型

diagram
main (生产环境) dev (开发环境) 日常开发在这里 feature/login 开发登录功能 feature/payment 开发支付功能 feature/search 开发搜索功能 hotfix/bug-001 紧急修复线上bug
main (生产环境)
  │
  ├── dev (开发环境) ◄──── 日常开发在这里
  │    │
  │    ├── feature/login    开发登录功能
  │    ├── feature/payment  开发支付功能
  │    └── feature/search   开发搜索功能
  │
  └── hotfix/bug-001        紧急修复线上bug

实战步骤

bash
# 场景:从dev分支拉取新功能分支,开发完成后合并回dev

# 1. 切换到dev分支
git checkout dev

# 2. 拉取最新代码
git pull

# 3. 创建并切换到功能分支
git checkout -b feature/user-login

# 4. 开发代码,提交到本地
git add .
git commit -m "feat: 添加用户登录功能"

# 5. 开发完成,切换到dev分支
git checkout dev

# 6. 合并功能分支到dev
git merge feature/user-login

# 7. 推送dev到远程
git push origin dev

# 8. 删除已合并的功能分支
git branch -d feature/user-login

8.4 本地分支与远程分支

bash
# 查看所有分支(本地+远程)
git branch -a

# 推送本地分支到远程(首次)
git push origin 本地分支名

# 推送并建立追踪关系(推荐)
git push -u origin 本地分支名

# 查看分支追踪关系
git branch -vv

# 为已有本地分支建立与远程分支的追踪关系
git branch --set-upstream-to=origin/远程分支名 本地分支名

# 示例:本地dev分支追踪远程dev分支
git branch --set-upstream-to=origin/dev dev

# 检出远程分支到本地(创建本地分支并建立追踪)
git checkout -b dev origin/dev

# Git 2.23+ 推荐写法
git switch -c dev --track origin/dev

本章小结

本章核心概念:分支的本质是“让多人并行开发互不干扰”,而不是为了把仓库结构弄复杂。好的分支策略能显著减少协作风险。

你现在应该掌握

  • 能说清 main / dev / feature / hotfix 的典型职责
  • 能完成创建、切换、合并、删除分支的基础操作
  • 能理解为什么企业开发通常不直接在主分支上改功能
09 / Section

9. 在IDEA中使用Git

9.1 配置Git路径

打开IDEA设置:FileSettingsVersion ControlGit

配置Git
配置Git

设置Git可执行文件路径:

  • Windows: C:\Program Files\Git\bin\git.exe
  • Mac: /usr/bin/git

点击"Test"按钮,显示版本号即配置成功。

9.2 项目颜色标识

如果项目被Git追踪,IDEA会用颜色标识文件状态:

颜色 含义
🔴 红色 新增文件,未追踪(Untracked)
🔵 蓝色 文件有修改(Modified)
🟢 绿色 已添加到暂存区(Staged)
白色/黑色 无变化,已提交
文件颜色
文件颜色

9.3 常用Git操作

右键菜单操作

在文件或项目上右键 → Git

  • Add:添加到暂存区(相当于git add
  • Commit:提交到本地仓库(相当于git commit
  • Push:推送到远程(相当于git push
  • Pull:拉取远程更新(相当于git pull

快捷键

操作 Windows快捷键
Commit Ctrl + K
Push Ctrl + Shift + K
Pull Ctrl + T
查看VCS操作 Alt + ~

9.4 查看文件变动

在代码编辑器左侧,可以看到文件的变动标记:

  • 绿色条:新增的行
  • 蓝色条:修改的行
  • 红色三角:删除的行

点击标记可以查看与上一版本的对比。

9.5 分支管理

底部状态栏点击分支名称,可以快速:

  • 切换分支
  • 创建新分支
  • 合并分支
  • 查看分支图

本章小结

本章核心概念:IDEA 中的 Git 操作,本质上只是把命令行操作做成了图形界面。理解底层逻辑后,再用 IDE 才不会“点着点着就懵了”。

你现在应该掌握

  • 能在 IDEA 中完成常见提交、拉取、推送操作
  • 能看懂文件颜色提示对应的 Git 状态
  • 能把 IDEA 中的操作和命令行命令对应起来
10 / Section

10. 常见问题与解决方案(FAQ)

Q1: 提交时提示"Please tell me who you are"

问题

text
*** Please tell me who you are.
Run:
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

解决

bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

Q2: push时提示"failed to push some refs"

问题

text
! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://gitee.com/xxx/xxx.git'

原因:远程仓库有更新,本地落后于远程。

解决

bash
# 先拉取远程更新
git pull

# 处理可能的冲突后,再push
git push

Q3: 忘记添加.gitignore,已经提交了不该提交的文件

解决

bash
# 1. 添加.gitignore文件(包含要忽略的文件)

# 2. 从仓库中移除文件,但保留本地文件
git rm --cached filename

# 3. 如果是目录
git rm -r --cached foldername

# 4. 提交更改
git add .
git commit -m "添加.gitignore,停止追踪某些文件"

Q4: 误删了文件(未commit),如何恢复

解决

bash
# 恢复工作区文件(从暂存区或仓库恢复)
git checkout -- 文件名

# 恢复所有文件
git checkout .

Q5: 误删了文件(已commit),如何恢复

解决

bash
# 查看文件历史
git log -- 文件名

# 恢复到指定版本
git checkout <commit_hash> -- 文件名

# 或
git restore --source=<commit_hash> -- 文件名

Q6: commit信息写错了,如何修改

解决

bash
# 修改最后一次commit信息(未push时)
git commit --amend -m "新的提交信息"

# 修改最后一次commit,添加漏掉的文件
git add 漏掉的文件
git commit --amend --no-edit

Q7: 如何查看某个文件是谁修改的

解决

bash
# 查看文件的修改历史
git blame 文件名

# 查看详细修改内容
git log -p -- 文件名

Q8: Windows和Mac换行符不一致导致的问题

问题:Windows使用CRLF(\r\n),Mac/Linux使用LF(\n),混用会导致diff显示整行变更。

解决

bash
# Windows用户配置(提交时自动转换)
git config --global core.autocrlf true

# Mac/Linux用户配置
git config --global core.autocrlf input

# 关闭自动转换(不推荐)
git config --global core.autocrlf false

Q9: 大文件误提交到仓库

问题:Git不适合管理大文件,会导致仓库臃肿。

解决

bash
# 从历史中彻底删除大文件(慎用,会重写历史)
git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch 大文件名' \
  --prune-empty --tag-name-filter cat -- --all

或使用BFG Repo-Cleaner工具:

bash
bfg --delete-files 大文件名

Q10: GitHub/Gitee连接超时或失败

解决

bash
# 设置代理(如果有)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

# 使用SSH协议替代HTTPS(更稳定)
# 将 https://github.com/xxx/xxx.git
# 改为 git@github.com:xxx/xxx.git
11 / Section

11. 学习建议

入门建议

  1. 先学命令行,再学IDE:命令行让你理解Git的本质,IDE只是提高效率
  2. 多练习:把日常代码都用Git管理起来
  3. 养成好习惯
  • 早pull晚push
  • commit信息写清楚
  • 不要提交不该提交的文件(.gitignore很重要)

进阶学习

  • 推荐阅读:《Pro Git》(官方中文文档,免费)
  • 学习Git内部原理(blob、tree、commit对象)
  • 掌握Git高级特性(rebase、cherry-pick、stash等)

企业实践

  • 熟悉公司的Git工作流(Git Flow / GitHub Flow / Trunk-Based)
  • 理解Code Review流程
  • 掌握CI/CD与Git的集成
12 / Section

学习建议

学完本章后,你至少应该做到

  • 能独立完成一次 clone → 修改 → add → commit → push 的完整流程
  • 能解释工作区、暂存区、本地仓库、远程仓库之间的关系
  • 遇到 push 失败时,知道先判断是否需要 pull 或处理冲突
  • 能说清 checkoutresetreset --hard 的区别与风险
  • 能在简单协作场景中使用分支完成开发与合并

复习优先级建议

  1. 先记流程:先把 Git 的核心链路记牢
  2. 再练命令:常用命令要做到能不看资料写出来
  3. 最后补细节:如配置、IDEA 操作、FAQ、企业分支模型
13 / Section

附录:Git命令速查表

基础命令

命令 作用
git init 初始化仓库
git clone <url> 克隆远程仓库
git status 查看状态
git add <file> 添加到暂存区
git commit -m "msg" 提交到本地仓库
git push 推送到远程
git pull 拉取远程更新
git log 查看历史

分支命令

命令 作用
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建并切换
git merge <name> 合并分支
git branch -d <name> 删除分支

撤销命令

命令 作用 危险程度
git checkout -- <file> 撤销工作区修改 ⚠️ 高
git reset HEAD <file> 撤销暂存区 ✅ 低
git reset --hard <hash> 回退版本 ⚠️⚠️ 极高
git reflog 查看操作历史 ✅ 安全

📚 参考书籍《Pro Git》 - Git官方中文文档,全面且免费