前言:为什么你的代码总是"失踪"?
"啊!我的代码呢?"——这可能是每个程序员都曾发出过的灵魂呐喊。还记得上周我熬夜写的300行JavaScript,第二天醒来发现被自己手贱覆盖了,那一刻我深刻理解了什么叫"痛彻心扉"。
别担心,今天我要介绍的Git & GitHub,就是专治各种代码"失踪"的神器!它不仅能让你的代码永远安全,还能让你和小伙伴们愉快地"多人运动"
一、Git:代码的"时光机"
1.1 什么是版本控制?
想象一下,你正在写一本小说:
-
初稿:主角叫张三,是个程序员
-
第二版:不行,程序员太普通了,改成超级英雄!
-
第三版:超级英雄太俗,还是改成会编程的猫吧...
没有版本控制,你只能在一个文件上反复修改,最后可能连自己最初的想法都找不回来了。Git就是帮你把这些"版本快照"都保存下来的神器!
1.2 Git的安装与配置
安装Git(以Windows为例):
-
官网下载:Git
-
一路"Next",安装完成后在命令行输入:
git --version
# 看到版本号说明安装成功,比如:git version 2.33.0.windows.2
基础配置(告诉Git你是谁):
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 查看配置
git config --list
1.3 Git核心命令实战
初始化仓库
mkdir my-project # 创建项目文件夹
cd my-project # 进入文件夹
git init # 初始化Git仓库
# 你会看到提示:Initialized empty Git repository in .../.git/
基础工作流
# 创建一个文件
echo "console.log('Hello Git');" > index.js# 查看状态
git status
# 会提示有未跟踪的文件index.js# 添加到暂存区
git add index.js# 提交到本地仓库
git commit -m "feat: 添加初始JavaScript文件"
# -m后面是提交信息,要写得清晰明了
查看历史记录
git log
# 你会看到类似这样的输出:
# commit 7a3b9c2...(哈希值)
# Author: 你的名字 <你的邮箱>
# Date: Wed Sep 1 10:00:00 2023 +0800
# feat: 添加初始JavaScript文件
二、分支管理:平行宇宙的魔法
2.1 为什么需要分支?
想象你在开发一个网站:
-
主分支(master/main):线上稳定运行的版本
-
开发分支(dev):日常开发用
-
功能分支(feature/login):开发登录功能
-
修复分支(hotfix/bug):紧急修复线上bug
这样就不会互相干扰,就像在平行宇宙中开发一样!
2.2 分支操作实战
# 查看当前分支
git branch
# 默认只有master/main分支,前面带*号# 创建新分支
git branch dev# 切换分支
git checkout dev
# 或者更简单的方式(创建并切换)
git checkout -b feature/login# 在新分支上做些修改
echo "// 登录功能代码" >> index.js
git add .
git commit -m "feat: 添加登录功能"# 切换回主分支
git checkout main# 合并分支
git merge feature/login
2.3 当分支"打架"了:解决冲突
有时候不同分支修改了同一处代码,合并时就会冲突:
<<<<<<< HEAD
console.log('Hello from main branch');
=======
console.log('Hello from feature branch');
>>>>>>> feature/login
你需要手动选择保留哪部分(或都保留),然后:
git add .
git commit -m "fix: 解决合并冲突"
三、GitHub:代码的"社交网络"
3.1 本地与远程的"异地恋"
# 在GitHub上创建新仓库(不要勾选README等初始化选项)
# 然后关联本地仓库
git remote add origin https://github.com/你的用户名/仓库名.git# 第一次推送
git push -u origin main
# 之后可以简写为 git push
3.2 团队协作流程
-
克隆仓库:
git clone https://github.com/团队/项目.git
2.获取最新代码:
git pull origin main
3.推送你的修改:
git push origin your-branch
4.发起Pull Request(PR):
-
在GitHub界面上操作
-
等待代码审查(Code Review)
-
通过后合并到主分支
3.3 GitHub实用技巧
Issue跟踪:用来记录bug、讨论功能
Wiki:项目文档
Actions:自动化CI/CD(高级功能)
Pages:免费托管静态网站(适合前端项目展示)
四、Git高级技巧
4.1 后悔药系列
# 撤销工作区修改
git checkout -- 文件名# 撤销暂存区修改
git reset HEAD 文件名# 回退到某个commit
git reset --hard commit哈希值# 不小心reset错了?别慌!
git reflog # 查看所有操作记录
git reset --hard 哈希值 # 回到未来
4.2 .gitignore:让Git"眼不见为净"
在项目根目录创建
.gitignore
文件,内容示例:# 忽略node_modules
node_modules/# 忽略IDE配置文件
.idea/
.vscode/# 忽略系统文件
.DS_Store# 忽略日志文件
*.log
五、Git最佳实践
-
提交信息规范:
-
feat: 新功能
-
fix: bug修复
-
docs: 文档变更
-
style: 代码格式化
-
refactor: 代码重构
-
test: 测试相关
-
chore: 构建过程或辅助工具的变动
-
-
分支命名规范:
-
feature/功能名
-
bugfix/问题描述
-
hotfix/紧急修复描述
-
-
提交频率:
-
小步提交,每个提交只做一件事
-
不要一次性提交大量改动
-
六、常见问题Q&A
Q: 为什么我的git push
总是被拒绝?
A: 可能是因为远程有更新你没拉取,先执行git pull --rebase
再push
Q: 如何彻底删除Git历史中的大文件?
A: 使用git filter-branch
或BFG Repo-Cleaner工具
Q: Git和SVN有什么区别?
A: Git是分布式版本控制,每个开发者都有完整仓库;SVN是集中式,必须联网工作
七、实战案例:用GitHub协作开发TodoList
-
创建GitHub仓库
-
克隆到本地
-
创建dev分支
-
开发功能并提交
-
发起PR
-
代码审查
-
合并到main分支
八、Git冷知识
-
Git的创造者是Linus Torvalds,也是Linux之父
-
GitHub被微软以75亿美元收购
-
Git的logo是一只章鱼猫(Octocat)
-
全球最大的开源社区GitHub有超过1亿个仓库
结语:从"Git小白"到"版本控制大师"
记住,Git就像学自行车——刚开始可能会摔几次,但一旦掌握,就能自由驰骋!现在就去GitHub上找一个感兴趣的开源项目,提交你的第一个PR吧!
思考题:
-
如果两个开发者同时修改了同一个文件的同一行代码,Git会如何处理?
-
如何用Git统计项目的代码行数?
-
Git的"rebase"和"merge"有什么区别?分别在什么场景下使用?
欢迎在评论区分享你的Git使用心得或遇到的奇葩问题