从零开始学 Git —— 新手也能看懂的版本控制指南
“掌握 Git,是进入现代开发的第一步。很多程序员都没使用过git,在面试的时候,面试官问git是什么,估计很多同学都很尴尬,也不知道GitHub的存在
在阅读该篇博客前,你知道git是什么吗?”
一、为什么要学 Git?
在团队开发中,你会遇到这些问题:
- 不小心改坏了代码,想恢复以前的版本;
- 同事也在改同一个文件,结果互相覆盖;
- 想知道是谁、在什么时候改了哪一行代码;
- 想把代码同步到云端(GitHub / Gitee)。
Git 就是为了解决这些问题而生的。
Git 让你可以:
- 安全记录历史(每一次修改都可回溯);
- 方便协作(每个人都有完整的仓库副本);
- 轻松切换版本(用分支控制开发进度);
- 自由实验(在独立分支上大胆尝试新功能)。
二、Git 安装与配置
安装
由于我使用的是macOS,这里以 macOS 为例进行安装。windows的话也可以通过界面进行开发,现在安装jetbrains全家桶时都会有git控制,根据提示安装即可。jetbrains真就开箱即用。
macOS:
1
brew install git
Windows: 下载 Git for Windows
Linux:
可以选择全局安装,同时也可以选择局部安装,看个人喜好了,这里以全局为例 。1
sudo apt install git
初次配置
1 | git config --global user.name "你的名字" |
检查是否生效:
1 | git config --list |
三、Git 的结构:三大区域理解图
Git 的操作其实就是在这三块区域之间移动文件:
1 | 工作区 (Working Directory) |
再加上远程仓库,构成完整流程:
1 | 本地仓库 ↔ 远程仓库(GitHub、Gitee) |
四、基本操作详解
初始化仓库
1 | git init |
查看状态
1 | git status |
添加修改到暂存区
1 | git add 文件名 |
提交修改
1 | git commit -m "描述本次修改" |
注意:提交的时候别随便提交,需要描述清楚。
查看历史记录
1 | git log --oneline |
五、分支管理(Branch)
分支是 Git 最强大的功能之一。
创建与切换
1 | git branch dev # 创建 dev 分支 |
查看分支
1 | git branch |
合并分支
1 | git checkout main |
删除分支
1 | git branch -d dev |
分支管理建议
main:主分支(稳定版本)dev:开发分支(日常开发)feature/*:功能分支(新功能)hotfix/*:线上紧急修复
六、远程仓库操作(GitHub / Gitee)
添加远程仓库
1 | git remote add origin https://github.com/yourname/repo.git |
查看远程信息
1 | git remote -v |
推送代码
1 | git push -u origin main |
拉取更新
1 | git pull origin main |
七、常见问题与解决方案
1. 忽略某些文件(.gitignore)
在项目根目录添加 .gitignore 文件,例如:
1 | node_modules/ |
2. 回退操作
回到上一次提交:
1 | git reset --hard HEAD~1 |
查看所有历史记录(含回退):
1 | git reflog |
3. 冲突解决(Merge Conflict)
当两个人修改同一文件同一行,Git 无法自动合并,就会提示冲突。
解决方式:
打开冲突文件,手动保留正确的版本;
保存后执行:
1
2git add .
git commit
八、推荐工作流
最常见的团队协作模式:Git Flow
1 | main ← 发布分支 |
- 开发从
dev创建 feature 分支; - 完成功能后合并回
dev; - 发布版本时再从
dev合并到main。
九、可视化工具推荐
- GitHub Desktop – 简单易用,适合初学者
- VS Code Git 面板 – 实时查看修改、分支、冲突
- Sourcetree – 功能强大,适合团队项目
十、实战演练
以一个项目为例:
1 | # 创建项目并初始化 |
完成
现在你就成功把项目同步到了 GitHub!
十一、进阶建议
- 学会使用
rebase整理提交历史; - 学习
stash暂存未提交修改; - 理解
tag管理版本号; - 尝试
cherry-pick挑选特定提交; - 了解
GitHub Flow与Git Flow的区别。
十二、结语
Git 看似命令多,其实底层逻辑非常统一:
“用快照记录文件状态,用指针描述时间线。”
“每一个 commit,都是一次思想的快照。”