Git知识巩固

1 阅读5分钟

当然可以!下面是一个从 0 到 1 巩固 Git 的完整指南,适合初学者和希望巩固基础的开发者。我们将循序渐进地讲解 Git 的核心概念、常用命令和最佳实践。


🌱 第一步:理解 Git 是什么?

✅ Git 是什么?

  • Git 是一个分布式版本控制系统(DVCS),用于跟踪文件的变化,特别是代码。
  • 它由 Linus Torvalds 在 2005 年创建,用于 Linux 内核开发。
  • 你可以用它来:
    • 记录每次修改
    • 回退到任意历史版本
    • 多人协作开发
    • 分支管理与合并

🛠️ 第二步:安装与配置 Git

1. 安装 Git

  • Windows: 下载 Git for Windows
  • macOS: brew install git
  • Linux (Ubuntu/Debian): sudo apt install git

2. 配置用户信息(必须)

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

使用 --global 表示全局配置,对所有项目生效。也可在项目内单独设置。

3. 查看配置

git config --list

📁 第三步:创建第一个仓库(Repository)

方法一:初始化新仓库

mkdir my-project2
cd my-project2
git init

这会在当前目录生成一个 .git 文件夹(隐藏),用于存储版本信息。

方法二:克隆已有仓库

git clone https://github.com/user/repo.git

🔁 第四步:Git 的三大区域

Git 操作围绕三个区域展开:

区域说明
工作区(Working Directory)你正在编辑的文件
暂存区(Staging Area / Index)通过 git add 添加准备提交的更改
本地仓库(Local Repository)执行 git commit 后保存到本地的历史记录

流程图:

修改文件 → 工作区
   ↓ git add
       → 暂存区
   ↓ git commit
           → 本地仓库

🧪 第五步:基本操作实战

1. 创建并修改文件

echo "Hello Git" > README.md

2. 查看状态

git status
# 输出:README.md 未被跟踪(untracked)

3. 添加到暂存区

git add README.md
# 或添加所有变更:git add .

4. 提交到本地仓库

git commit -m "Add README.md"

-m 后面是提交信息,务必清晰描述改动内容。

5. 再次修改文件

echo "\nThis is a new line." >> README.md

6. 查看差异

git diff
# 显示工作区与暂存区之间的差异
git diff --staged
# 显示暂存区与最新提交之间的差异

7. 提交第二次更改

git add .
git commit -m "Add new line to README"

🔍 第六步:查看提交历史

git log
# 显示提交历史(按 q 退出)

git log --oneline
# 简洁格式:一行一个提交

git log --graph --oneline
# 显示分支合并图

🔀 第七步:分支管理(Branching)

分支是 Git 的核心优势之一,允许你在不影响主干的情况下开发新功能。

1. 查看分支

git branch
# 列出所有本地分支,* 表示当前所在分支

2. 创建新分支

git branch feature/login

3. 切换分支

git checkout feature/login
# 或合并创建+切换:
git checkout -b feature/login

4. 在分支上工作

echo "Login page started" > login.html
git add .
git commit -m "Start login page"

5. 切回主分支

git checkout main
# 或 master(老版本)

6. 合并分支

git merge feature/login
# 将 feature/login 的更改合并到当前分支

7. 删除已合并的分支

git branch -d feature/login

⚠️ 第八步:处理冲突(Merge Conflict)

当你在两个分支中修改了同一文件的同一部分,合并时会产生冲突。

模拟冲突:

  1. main 分支修改 README.md 并提交
  2. 切换到 feature/login,也修改同一行并提交
  3. 回到 main,执行 git merge feature/login

Git 会提示冲突,并标记如下内容:

<<<<<<< HEAD
This is main branch change
=======
This is feature branch change
>>>>>>> feature/login

解决方法:

  • 手动编辑文件,保留你需要的内容
  • 删除 <<<<<<<, =======, >>>>>>> 标记
  • 保存后执行:
git add README.md
git commit -m "Resolve merge conflict"

☁️ 第九步:远程仓库操作(GitHub/Gitee等)

1. 添加远程仓库

git remote add origin https://github.com/yourname/repo.git

2. 推送到远程

git push -u origin main
# -u 表示设置上游(upstream),以后可用 git push 直接推送

3. 从远程拉取

git pull origin main
# 等价于 git fetch + git merge

4. 克隆远程项目

git clone https://github.com/user/project.git

🧹 第十步:常用技巧与最佳实践

1. 忽略文件(.gitignore)

创建 .gitignore 文件,防止某些文件被提交:

# 忽略日志文件
*.log

# 忽略 node_modules
node_modules/

# 忽略环境变量
.env

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

2. 修改上次提交

git commit --amend -m "New message"
# 如果只是想补加文件:
git add forgotten-file.txt
git commit --amend --no-edit

注意:不要修改已经 push 的提交!

3. 查看某个提交的详情

git show <commit-hash>

4. 回退操作(谨慎使用)

撤销工作区修改

git checkout -- filename.txt
# 恢复文件到最近一次提交的状态

撤销暂存

git reset HEAD filename.txt

回退到某次提交(软回退)

git reset --soft HEAD~1
# 回退一次提交,但保留更改在暂存区
git reset --hard HEAD~1
# 彻底删除最近一次提交及其更改(危险!)

💡 建议优先使用 git revert 来撤销提交,更安全:

git revert <commit-hash>
# 生成一个新的“反向”提交,不会破坏历史

🏁 第十一步:总结 — Git 核心命令速查表

功能命令
初始化仓库git init
克隆仓库git clone url
查看状态git status
添加文件git add .git add filename
提交更改git commit -m "message"
查看日志git log --oneline
创建分支git branch name
切换分支git checkout namegit switch name
创建并切换git checkout -b name
合并分支git merge name
推送到远程git push origin main
拉取远程更新git pull origin main
忽略文件.gitignore
撤销修改git checkout -- file
修改上次提交git commit --amend

📚 推荐学习资源

  1. 官方文档git-scm.com/doc
  2. Pro Git 中文版(免费书籍):git-scm.com/book/zh/v2
  3. Learn Git Branching(交互式学习):learngitbranching.js.org 👍 强烈推荐!

✅ 小练习(动手巩固)

  1. 创建一个本地 Git 仓库
  2. 添加两个文件:index.htmlstyle.css
  3. 提交一次
  4. 创建 feature/header 分支,添加头部结构
  5. 提交后合并回主分支
  6. 创建 .gitignore 忽略 .tmp 文件
  7. 推送到 GitHub(可选)

🎉 恭喜你!现在你已经从 0 到 1 掌握了 Git 的核心知识。
继续在项目中实践,你会越来越熟练!

如果你有任何问题(比如 rebase vs merge、stash、tag 等),欢迎继续提问,我可以为你深入讲解进阶内容。