Skip to content
0

🚀 Git 初识和使用 - 从入门到实践

📚 学习路线

Git基础概念 → 安装配置 → 核心命令 → 分支管理 → 团队协作

💡 为什么要学Git? Git是目前世界上最先进的分布式版本控制系统,被广泛应用于软件开发、文档管理等领域。掌握Git是每个开发者的必备技能。


📖 什么是 Git?

定义

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

核心特点

特点说明优势
🌐 分布式每个开发者都拥有完整的代码仓库离线工作,安全可靠
高性能本地操作,速度极快提交、分支切换都是秒级
🔄 分支管理轻量级分支系统方便并行开发和实验
🔒 数据完整性SHA-1哈希保证数据完整防止数据损坏和篡改
👥 团队协作支持多人协同开发代码合并、冲突解决

🆚 Git vs 其他版本控制系统

对比表

对比项Git (分布式)SVN (集中式)
存储方式完整克隆部分检出
网络依赖✅ 离线可用❌ 需要联网
分支操作⚡ 极快🐢 较慢
存储空间📦 较大💾 较小
学习曲线📈 稍陡📉 平缓
流行度🔥 极高📉 下降

为什么选择Git?

  • ✅ 业界标准,GitHub、GitLab等平台支持
  • ✅ 强大的分支管理能力
  • ✅ 活跃的社区和丰富的工具生态
  • ✅ 适合分布式团队协作

💻 安装 Git

Windows 系统

方法一:官方安装包

  1. 访问 Git官网
  2. 下载 Windows 版本
  3. 运行安装程序,推荐选项:
    • ✅ Git Bash Here (右键菜单集成)
    • ✅ Use Visual Studio Code as Git's default editor
    • ✅ Override the default branch name (设为 main)
    • ✅ Git from the command line and also from 3rd-party software

方法二:使用 Chocolatey

powershell
# 使用包管理器安装
choco install git -y

验证安装:

bash
git --version
# 输出: git version 2.43.0

macOS 系统

方法一:使用 Homebrew(推荐)

bash
# 安装 Git
brew install git

# 验证安装
git --version

方法二:Xcode Command Line Tools

bash
xcode-select --install

Linux 系统

Debian/Ubuntu:

bash
sudo apt update
sudo apt install git -y

CentOS/RHEL:

bash
sudo yum install git -y
# 或
sudo dnf install git -y

Arch Linux:

bash
sudo pacman -S git

验证安装:

bash
git --version

⚙️ Git 初始配置

必须配置:用户信息

每次Git提交都会使用这些信息,它们会写入到每一次提交中:

bash
# 设置用户名
git config --global user.name "Your Name"

# 设置邮箱
git config --global user.email "your.email@example.com"

推荐配置

bash
# 设置默认分支名为 main
git config --global init.defaultBranch main

# 设置默认编辑器为 VS Code
git config --global core.editor "code --wait"

# 启用颜色显示
git config --global color.ui auto

# 设置命令别名(可选)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --graph --oneline --decorate --all"

查看配置

bash
# 查看所有配置
git config --list

# 查看特定配置
git config user.name
git config user.email

配置文件位置:

  • 🌐 系统级:/etc/gitconfig
  • 👤 全局级:~/.gitconfig~/.config/git/config
  • 📁 仓库级:.git/config

🎯 Git 核心概念

三个工作区域

┌─────────────────┐
│  工作目录        │  ← 你实际编辑文件的地方
│  (Working Dir)  │
└────────┬────────┘
         │ git add

┌─────────────────┐
│  暂存区          │  ← 临时存储即将提交的修改
│  (Staging Area) │
└────────┬────────┘
         │ git commit

┌─────────────────┐
│  Git仓库         │  ← 永久保存的版本历史
│  (Repository)   │
└─────────────────┘

文件状态

状态说明图标
Untracked未跟踪,新文件🆕
Unmodified未修改,已提交
Modified已修改,未暂存✏️
Staged已暂存,待提交📦

🛠️ Git 基础命令

创建仓库

方法一:初始化新仓库

bash
# 创建项目目录
mkdir my-project
cd my-project

# 初始化 Git 仓库
git init

# 结果:创建 .git 隐藏目录

方法二:克隆现有仓库

bash
# 克隆远程仓库
git clone https://github.com/username/repository.git

# 克隆到指定目录
git clone https://github.com/username/repository.git my-folder

# 克隆指定分支
git clone -b branch-name https://github.com/username/repository.git

基本操作流程

1️⃣ 查看状态

bash
# 查看工作区状态
git status

# 简洁模式
git status -s

输出示例:

On branch main
Changes not staged for commit:
  modified:   README.md
  
Untracked files:
  newfile.txt

2️⃣ 添加文件到暂存区

bash
# 添加单个文件
git add README.md

# 添加多个文件
git add file1.txt file2.txt

# 添加所有修改(推荐)
git add .

# 添加所有.js文件
git add *.js

# 交互式添加
git add -i

3️⃣ 提交更改

bash
# 提交暂存区的文件
git commit -m "提交说明"

# 提交所有已跟踪文件的修改(跳过 git add)
git commit -a -m "提交说明"

# 修改上次提交
git commit --amend -m "新的提交说明"

提交信息规范(推荐):

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

type: feat新功能 | fix修复 | docs文档 | style格式 | refactor重构 | test测试 | chore构建

示例:
feat(user): 添加用户登录功能
fix(api): 修复数据接口返回错误
docs(readme): 更新安装说明

4️⃣ 查看提交历史

bash
# 查看提交历史
git log

# 单行显示
git log --oneline

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

# 查看最近3次提交
git log -3

# 查看每次提交的差异
git log -p

# 查看统计信息
git log --stat

🔄 文件操作

查看差异

bash
# 查看工作区与暂存区的差异
git diff

# 查看暂存区与仓库的差异
git diff --staged
# 或
git diff --cached

# 查看两次提交的差异
git diff commit1 commit2

# 查看特定文件的差异
git diff README.md

撤销操作

bash
# 撤销工作区的修改(危险操作!)
git checkout -- filename

# 或使用新命令
git restore filename

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

# 或使用新命令
git restore --staged filename

# 撤销最近一次提交(保留修改)
git reset --soft HEAD~1

# 撤销最近一次提交(不保留修改,危险!)
git reset --hard HEAD~1

删除和重命名

bash
# 删除文件(同时从工作区和暂存区删除)
git rm filename

# 只从Git删除,保留本地文件
git rm --cached filename

# 重命名文件
git mv old-name new-name

# 等同于:
# mv old-name new-name
# git rm old-name
# git add new-name

🌿 分支管理

为什么要使用分支?

  • 🔀 并行开发:多个功能同时开发互不影响
  • 🧪 实验性功能:在独立分支上测试新想法
  • 🐛 紧急修复:快速修复线上bug
  • 👥 团队协作:每个人在自己的分支上工作

分支操作

bash
# 查看所有分支
git branch

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

# 创建新分支
git branch feature-login

# 切换分支
git checkout feature-login

# 创建并切换分支(简写)
git checkout -b feature-login

# 或使用新命令
git switch feature-login
git switch -c feature-login

# 重命名分支
git branch -m old-name new-name

# 删除分支
git branch -d feature-login

# 强制删除未合并的分支
git branch -D feature-login

合并分支

bash
# 合并指定分支到当前分支
git merge feature-login

# 不使用快进模式合并(保留分支信息)
git merge --no-ff feature-login

# 查看已合并的分支
git branch --merged

# 查看未合并的分支
git branch --no-merged

解决合并冲突

当两个分支修改了同一文件的同一部分时,会产生冲突:

bash
# 1. 合并时出现冲突
git merge feature-branch
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt

# 2. 查看冲突文件
git status

# 3. 手动编辑冲突文件
# <<<<<<< HEAD
# 当前分支的内容
# =======
# 要合并分支的内容
# >>>>>>> feature-branch

# 4. 标记为已解决
git add file.txt

# 5. 完成合并
git commit -m "解决合并冲突"

🌐 远程仓库

查看远程仓库

bash
# 查看远程仓库
git remote

# 查看远程仓库详细信息
git remote -v

# 查看远程仓库详情
git remote show origin

添加远程仓库

bash
# 添加远程仓库
git remote add origin https://github.com/username/repo.git

# 修改远程仓库URL
git remote set-url origin git@github.com:username/repo.git

# 删除远程仓库
git remote rm origin

推送和拉取

bash
# 推送到远程仓库
git push origin main

# 首次推送并设置上游分支
git push -u origin main

# 推送所有分支
git push --all origin

# 拉取远程更新
git pull origin main

# 等同于:
# git fetch origin
# git merge origin/main

# 只获取不合并
git fetch origin

# 使用rebase方式拉取
git pull --rebase origin main

远程分支操作

bash
# 查看远程分支
git branch -r

# 跟踪远程分支
git checkout -b local-branch origin/remote-branch

# 或简写(Git会自动跟踪)
git checkout remote-branch

# 推送本地分支到远程
git push origin local-branch:remote-branch

# 删除远程分支
git push origin --delete remote-branch
# 或
git push origin :remote-branch

🔖 标签管理

创建标签

bash
# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本 1.0.0 发布"

# 为特定提交创建标签
git tag -a v0.9.0 commit-hash -m "版本 0.9.0"

# 查看所有标签
git tag

# 查看标签详情
git show v1.0.0

推送和删除标签

bash
# 推送单个标签到远程
git push origin v1.0.0

# 推送所有标签
git push origin --tags

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0
# 或
git push origin :refs/tags/v1.0.0

📝 .gitignore 文件

什么是 .gitignore?

.gitignore 文件用于指定Git应该忽略的文件,这些文件不会被跟踪和提交。

常用规则

gitignore
# 忽略所有 .log 文件
*.log

# 忽略所有 node_modules 目录
node_modules/

# 忽略 dist 目录
dist/
build/

# 忽略所有 .env 文件
.env
.env.local

# 忽略 IDE 配置
.vscode/
.idea/
*.swp

# 但不忽略特定文件
!important.log

# 只忽略当前目录的 TODO 文件
/TODO

# 忽略所有 doc 目录下的 .txt 文件
doc/**/*.txt

常见项目模板

Node.js 项目:

gitignore
node_modules/
npm-debug.log
.env
dist/
.DS_Store

Python 项目:

gitignore
__pycache__/
*.py[cod]
*.so
.Python
env/
venv/
.env

Java 项目:

gitignore
*.class
*.jar
*.war
target/
.idea/

已跟踪文件处理

如果文件已经被Git跟踪,需要先从索引中删除:

bash
# 删除已跟踪的文件(保留本地文件)
git rm --cached filename

# 删除整个目录
git rm -r --cached directory/

# 提交更改
git commit -m "删除不需要跟踪的文件"

🎓 实战练习

练习1:创建第一个Git项目

bash
# 1. 创建项目目录
mkdir my-first-git-project
cd my-first-git-project

# 2. 初始化Git仓库
git init

# 3. 创建README文件
echo "# My First Git Project" > README.md

# 4. 添加到暂存区
git add README.md

# 5. 提交
git commit -m "初始提交:添加README"

# 6. 查看历史
git log

练习2:分支工作流

bash
# 1. 创建并切换到开发分支
git checkout -b develop

# 2. 创建功能分支
git checkout -b feature/user-login

# 3. 开发功能并提交
echo "用户登录功能" > login.js
git add login.js
git commit -m "feat: 添加用户登录功能"

# 4. 切换回develop分支
git checkout develop

# 5. 合并功能分支
git merge feature/user-login

# 6. 删除功能分支
git branch -d feature/user-login

练习3:与GitHub协作

bash
# 1. 在GitHub创建仓库

# 2. 关联远程仓库
git remote add origin git@github.com:username/repo.git

# 3. 推送到远程
git push -u origin main

# 4. 修改文件并提交
echo "更新内容" >> README.md
git add README.md
git commit -m "docs: 更新README"

# 5. 推送更新
git push origin main

# 6. 拉取其他人的更新
git pull origin main

💡 Git 最佳实践

✅ 提交相关

  1. 频繁提交,小步快跑

    • 每完成一个小功能就提交
    • 避免一次提交包含多个不相关的修改
  2. 写清晰的提交信息

    ✅ 好的提交信息:
    feat(auth): 添加用户登录功能
    fix(api): 修复用户数据接口返回值错误
    
    ❌ 不好的提交信息:
    修改了一些东西
    update
  3. 提交前先拉取

    bash
    git pull --rebase origin main
    git push origin main

✅ 分支相关

  1. 使用有意义的分支名

    ✅ 好的分支名:
    feature/user-authentication
    bugfix/login-error
    hotfix/security-patch
    
    ❌ 不好的分支名:
    test
    temp
    new-branch
  2. 保持main分支稳定

    • main/master 分支应该始终是可发布的
    • 开发在 develop 或功能分支上进行
  3. 及时删除已合并的分支

    bash
    git branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d

✅ 协作相关

  1. 使用 Pull Request / Merge Request

    • 代码审查
    • 讨论和改进
    • 保证代码质量
  2. 解决冲突时保持冷静

    • 仔细查看冲突内容
    • 与团队成员沟通
    • 测试合并后的代码
  3. 不要提交敏感信息

    • 密码、密钥
    • API Token
    • 数据库连接字符串
    • 使用 .gitignore 和环境变量

🚨 常见问题

❓ 如何撤销已经push的提交?

bash
# 方法1: 使用 revert(推荐,安全)
git revert commit-hash
git push origin main

# 方法2: 使用 reset(谨慎使用!)
git reset --hard HEAD~1
git push -f origin main  # 强制推送

❓ 误删了文件怎么恢复?

bash
# 恢复工作区的文件
git checkout -- filename

# 或
git restore filename

# 从特定提交恢复
git checkout commit-hash -- filename

❓ 如何修改已经push的提交信息?

bash
# 修改最后一次提交
git commit --amend -m "新的提交信息"
git push -f origin branch-name  # 强制推送

❓ 如何暂存当前工作?

bash
# 暂存当前修改
git stash

# 查看暂存列表
git stash list

# 恢复最近的暂存
git stash pop

# 恢复特定的暂存
git stash apply stash@{0}

# 删除暂存
git stash drop stash@{0}

🔗 推荐资源

📚 学习资源

🛠️ 实用工具

📱 浏览器扩展


📊 Git 命令速查表

操作命令
📁 初始化仓库git init
📥 克隆仓库git clone <url>
📝 查看状态git status
➕ 添加文件git add <file>
💾 提交git commit -m "message"
📜 查看历史git log
🔍 查看差异git diff
🌿 创建分支git branch <name>
🔀 切换分支git checkout <name>
🔗 合并分支git merge <name>
⬆️ 推送git push origin <branch>
⬇️ 拉取git pull origin <branch>
🏷️ 创建标签git tag -a <tag> -m "msg"
💾 暂存工作git stash
↩️ 撤销修改git restore <file>

🎉 恭喜!

你已经掌握了Git的基础知识!
现在可以开始在实际项目中使用Git了。
记住:熟能生巧,多练习才能真正掌握!


📝 最后更新: 2025-10-19
🎓 难度级别: 入门 → 进阶
⏱️ 预计学习时间: 2-3小时

下一步:学习 Git 高级配置和团队协作工作流!

最近更新