1. 为什么每个开发者都需要掌握Git和GitHub刚入行那会儿我最怕同事说你把代码commit一下。当时连commit是什么意思都不懂更别说pull request、merge这些高级操作了。直到有次误删了三天的工作量才真正明白版本控制的重要性。Git作为目前最主流的分布式版本控制系统配合GitHub这个全球最大的代码托管平台已经成为开发者必备的核心技能。这个教程会带你从零开始用最接地气的方式掌握Git和GitHub的日常使用。不同于官方文档的晦涩难懂我会用实际项目场景为例手把手教你如何把本地项目上传到GitHub日常开发中如何管理版本更新出现问题时如何回溯到之前的版本团队协作时的标准工作流程2. 环境准备与基础配置2.1 Git安装与基础设置首先到Git官网下载对应系统的安装包。Windows用户建议勾选Git Bash Here选项这样在文件夹右键菜单中就能快速打开Git命令行。安装完成后需要配置用户信息这是你每次提交的签名git config --global user.name 你的用户名 git config --global user.email 你的邮箱注意这里的邮箱建议和GitHub账号保持一致否则贡献统计可能无法正确关联我习惯开启颜色显示和设置默认编辑器为VS Codegit config --global color.ui auto git config --global core.editor code --wait2.2 GitHub账号与SSH配置注册GitHub账号后我们需要建立本地与远程的安全连接。SSH是目前最推荐的方式生成SSH密钥对ssh-keygen -t ed25519 -C 你的邮箱将公钥(~/.ssh/id_ed25519.pub)内容添加到GitHub的SSH keys设置中测试连接ssh -T gitgithub.com3. 项目上传完整流程3.1 本地仓库初始化假设你已经在本地开发了一个项目现在要把它推送到GitHub# 进入项目目录 cd /path/to/your/project # 初始化Git仓库 git init # 查看当前文件状态 git status首次使用时会看到很多红色文件这些是未被跟踪的变更。我们需要明确告诉Git哪些文件需要纳入版本控制。3.2 .gitignore文件配置不是所有文件都应该提交到仓库。比如Node.js的node_modules、Python的__pycache__等。创建一个.gitignore文件# 忽略操作系统自动生成的文件 .DS_Store Thumbs.db # 忽略日志文件 *.log # 忽略依赖目录 node_modules/ venv/专业建议可以在gitignore.io网站生成针对不同语言的.gitignore模板3.3 首次提交与远程关联# 添加所有文件到暂存区 git add . # 提交到本地仓库 git commit -m 初始项目提交 # 在GitHub创建新仓库获取SSH地址 git remote add origin gitgithub.com:用户名/仓库名.git # 推送到远程main分支 git push -u origin main4. 日常开发中的版本管理4.1 标准工作流程成熟的Git工作流通常遵循以下步骤拉取最新代码git pull origin main创建新分支开发功能git checkout -b feature/新功能开发完成后提交git add . git commit -m 实现了新功能推送到远程git push origin feature/新功能在GitHub发起Pull Request4.2 提交信息的艺术糟糕的提交信息是项目的灾难。好的提交信息应该首行不超过50字符的简要说明空一行后详细描述变更内容和原因使用命令式语气如Fix bug而非Fixed bug示例优化用户登录流程 - 将登录超时从30分钟延长至2小时 - 增加记住密码选项 - 修复了移动端键盘遮挡问题4.3 分支管理策略我推荐的主分支策略main稳定版本只接受经过测试的合并develop日常开发集成分支feature/*功能开发分支hotfix/*紧急修复分支查看分支关系图git log --graph --oneline --all5. 版本回溯与问题修复5.1 查看历史记录# 简洁版 git log --oneline # 带变更文件 git log --stat # 图形化显示 git log --graph5.2 撤销本地修改场景1撤销工作区未暂存的修改git checkout -- 文件名场景2撤销已暂存但未提交的修改git reset HEAD 文件名5.3 回退到历史版本找到要回退的commit id后# 软回退(保留更改) git reset --soft commit_id # 混合回退(保留修改但取消暂存) git reset commit_id # 硬回退(彻底丢弃) git reset --hard commit_id警告--hard操作不可逆确保你确实要丢弃这些修改5.4 恢复已删除的分支意外删除分支后可以通过reflog找回git reflog # 找到删除前的commit git checkout -b 分支名 commit_id6. 团队协作最佳实践6.1 Fork Pull Request流程Fork主仓库到自己的账号克隆自己的仓库到本地git clone gitgithub.com:你的账号/仓库.git添加主仓库为upstreamgit remote add upstream gitgithub.com:主仓库/仓库.git定期同步主仓库变更git fetch upstream git merge upstream/main6.2 解决合并冲突当多人修改同一文件时可能出现冲突。解决方法打开冲突文件会看到类似标记 HEAD 你的代码 别人的代码 branch手动决定保留哪部分或合并两者标记冲突已解决git add 冲突文件 git commit6.3 Code Review要点每次PR只解决一个问题确保代码风格一致添加必要的单元测试更新相关文档描述清楚变更原因7. 高级技巧与常见问题7.1 交互式变基(rebase -i)整理凌乱的提交历史git rebase -i HEAD~3常用操作pick保留提交reword修改提交信息squash合并到前一个提交fixup合并并丢弃提交信息7.2 储藏临时修改(stash)当需要切换分支但当前工作未完成时git stash # 储藏修改 git stash list # 查看储藏列表 git stash pop # 恢复最近储藏7.3 常见错误解决方案问题git push被拒绝 原因远程有本地没有的新提交 解决git pull --rebase origin main git push问题误提交了大文件 解决git filter-branch --tree-filter rm -f 大文件名 HEAD git push origin --force --all8. 我的实战经验分享经过多年使用我总结了这些血泪教训提交前一定要先pull避免冲突重要分支设置保护规则数据库变更等不可逆操作要特别小心定期清理远程已合并的分支敏感信息绝不提交即使后来删除对于复杂操作我习惯先在测试仓库演练。Git最强大的地方在于几乎所有操作都可逆前提是你知道如何找回。建议新手多使用GUI工具如GitKraken辅助理解等熟悉后再转向命令行。
阅读完成 · 觉得有帮助?