版本控制:GitHub
一、简介
GitHub 是全球最大的基于 Git 的代码托管和协作平台,已成为开发者、团队和企业进行版本控制、项目管理和协作开发的核心工具。它不仅提供了 Git 的所有版本控制功能,还扩展了丰富的协作工具,让代码管理和团队协作更高效。
二、核心概念
1、仓库(Repository / Repo)
代码的 “存储库”,相当于一个项目文件夹,包含所有代码文件、历史记录和配置信息。每个仓库可以是公共的(开源项目,任何人可见)或私有的(仅授权成员可见)。
2、分支(Branch)
代码的 “并行版本线”,允许你在不影响主代码的情况下开发新功能或修复 bug。
通常用 main 或 master 作为主分支(存放稳定代码),其他分支(如 feature/login、fix/bug)用于临时开发。
3、提交(Commit)
对代码修改的 “快照记录”,每次提交会生成一个唯一 ID,包含修改内容和描述信息(如 “新增用户登录功能”),便于追溯历史。
4、合并请求(Pull Request / PR)
团队协作的核心功能,用于请求将一个分支的修改合并到另一个分支。提交 PR 后,团队成员可以审查代码、提出建议,通过后再合并,保证代码质量。
5、Issue
用于跟踪任务、bug 或功能建议的 “工单系统”,可以分配负责人、添加标签(如 bug、enhancement),并与代码提交关联。
三、核心功能与价值
1、版本控制
记录代码的每一次修改,随时查看历史版本,必要时可回滚到之前的状态。
多人同时修改代码时,通过 Git 的分支和合并机制避免冲突。
2、团队协作
支持多人共同开发一个项目,通过 PR 进行代码审查和讨论。
可设置团队权限(如只读、可写、管理员),控制谁能修改代码。
3、项目管理
用 Issues 跟踪任务和 bug,用 Projects 看板可视化进度(类似 Trello)。
通过标签(Labels)、里程碑(Milestones)分类和规划工作。
4、自动化与扩展
GitHub Actions:自动执行测试、构建、部署等流程(如每次提交代码后自动运行测试)。
GitHub Pages:免费托管静态网站(如项目文档、个人博客)。
集成第三方工具(如 Slack、Jira、VS Code 等)。
5、开源生态
全球最大的开源社区,托管了数百万开源项目(如 Linux、Python、React 等)。
开发者可以参与开源项目贡献代码,学习优秀项目的开发经验。
四、工作流程
1、标准工作流(团队协作必备)
这是最推荐的协作模式,能保证代码质量和历史清晰。
- 从 main 分支创建新分支:为每个新功能或 bug 修复创建一个独立的分支(如 feature/login 或 fix/payment-bug)。
- 在新分支上进行开发和提交:不断修改代码,并使用 git commit 记录你的每一次有意义的改动。
- 将分支推送到 GitHub:使用 git push 将你的本地分支上传到远程仓库。
- 创建 Pull Request (PR):在 GitHub 网页上,申请将你的分支合并回 main 分支。此时可以邀请同事进行代码审查。
- 代码审查与讨论:同事会检查你的代码,提出修改意见。你可以根据意见继续在本地修改并 push,PR 会自动更新。
- 通过审查并合并:当审查通过后,由项目负责人或你自己将 PR 合并到 main 分支。
- 删除已合并的分支:合并后,该功能分支就可以安全删除了,保持仓库整洁。
2、常用操作流程
2.1、新建 / 克隆仓库
从 GitHub 新建仓库,或用 git clone <仓库地址> 将远程仓库复制到本地。
2.2、日常开发
- 创建分支:git checkout -b 新分支名
- 提交修改:git add . → git commit -m “描述”
- 推送代码:git push origin 分支名
2.3、协作与合并
- 提交 PR:在 GitHub 上申请将分支合并到主分支。
- 审查代码:团队成员在 PR 中评论、提出修改建议。
- 解决冲突:若有代码冲突,按规则处理后合并。
五、常用命令清单
| 场景 | 命令 | 说明 |
|---|---|---|
| 配置 | git config —global user.name “Your Name” |
设置全局用户名 |
| git config —global user.email “your.email@example.com” |
设置全局邮箱 | |
| 初始化 / 克隆 | git clone |
从远程仓库克隆到本地 |
| git init | 将当前文件夹初始化为 Git 仓库 | |
| 日常开发 | git status | 查看当前仓库的状态(已修改 / 待提交等) |
| git add . | 将所有修改过的文件加入暂存区 | |
| git commit -m “你的提交信息” | 将暂存区的文件提交,并附上说明 | |
| git branch |
创建一个新分支 | |
| git checkout |
切换到指定分支 | |
| 协作 | git pull | 拉取远程仓库的最新代码并与本地分支合并 |
| git push | 将本地分支的提交推送到远程仓库 |
六、在GitHub上新建分支
在 GitHub 上新建分支可以通过网页端或本地命令行两种方式操作,以下是详细步骤:
方法一:通过 GitHub 网页端新建分支
适合快速创建分支,无需本地操作:
- 打开你的 GitHub 仓库页面(如 https://github.com/用户名/仓库名)
- 点击页面顶部的分支选择框(默认显示 main 或 master)
- 在输入框中直接输入新分支名称(如 feature/user-profile)
- 点击「Create branch: 新分支名 from ‘main’」按钮
新建的分支会基于当前选择的分支(通常是 main)创建,包含所有相同的代码内容。
方法二:通过本地 Git 命令行新建分支
适合需要在本地开发后再推送到远程的场景:
步骤 1:确保本地代码是最新的
bash 运行\# 切换到主分支(如 main)git checkout main\# 拉取远程最新代码,保证本地与远程同步git pull origin main
步骤 2:创建并切换到新分支
bash 运行\# 创建并立即切换到新分支(推荐)git checkout -b 新分支名\# 示例:创建一个用户头像功能的分支git checkout -b feature/user-avatar
步骤 3:将本地新分支推送到 GitHub 远程
bash 运行\# 推送新分支到远程仓库git push -u origin 新分支名\# 示例git push -u origin feature/user-avatar
执行后,GitHub 仓库中就会出现这个新分支,-u 参数会将本地分支与远程分支关联,后续只需用 git push 即可推送修改。
分支命名规范(推荐)
为了团队协作清晰,建议遵循统一的命名规则:
- 功能开发:feature/功能名称(如 feature/payment-system)
- 修复 bug:fix/问题描述(如 fix/login-error)
- 紧急修复:hotfix/问题描述(如 hotfix/crash-on-ios)
- 发布版本:release/v1.0.0
七、在GitHub上处理合并冲突
在 GitHub 上处理合并冲突是团队协作中常见的操作,通常发生在两个分支修改了同一文件的同一部分时。以下是详细的处理步骤和方法:
1、了解合并冲突的产生原因
当满足以下条件时,Git 无法自动合并代码,会产生冲突:
- 两个分支(如 feature/A 和 develop)修改了同一个文件
- 且修改的是该文件的同一部分内容
- 当尝试合并这两个分支(如通过 PR)时,Git 无法判断保留哪部分修改
2、处理合并冲突的完整步骤
场景:在 PR 中发现冲突
当你创建 PR 后,GitHub 会提示 “此分支有冲突,无法自动合并”,此时需要手动解决。
方法 1:在 GitHub 网页端直接解决(简单冲突)
适用于冲突内容较少、容易判断的情况:
- 在 PR 页面点击「Resolve conflicts」按钮
- 此时会看到冲突文件,其中:
- <<<<<<< feature/A 到 ======= 之间是你的分支的修改
- \======= 到 >>>>>>> develop 之间是目标分支(如 develop)的修改
- 手动编辑内容:
- 保留需要的代码(删除不需要的部分)
- 务必删除所有冲突标记(<<<<<<<、=======、>>>>>>>)
- 编辑完成后点击「Mark as resolved」
- 最后点击「Commit merge」完成冲突解决
方法 2:在本地解决(复杂冲突推荐)
当冲突内容较多或需要借助 IDE 工具时,更推荐在本地处理:
1) 拉取目标分支的最新代码
确保你的本地目标分支(如 develop)是最新的:
bash 运行git checkout developgit pull origin develop
2)切换到自己的功能分支
bash 运行git checkout feature/A
3)合并目标分支到自己的分支
主动将 develop 分支的代码合并到你的功能分支,触发冲突:
bash 运行git merge develop
此时终端会提示 “Automatic merge failed… fix conflicts and then commit the result”
4)查看冲突文件
执行 git status 可看到标为「both modified」的冲突文件
5)解决冲突
用编辑器打开冲突文件,找到冲突标记并修改:
plaintext 运行<<<<<<< HEAD(你的分支修改)这是我写的代码\=======这是同事写的代码\>>>>>>> develop(目标分支修改)
- 协商后保留正确代码(可同时保留双方有价值的修改)
- 必须删除所有冲突标记
6)标记为已解决并提交
bash 运行\# 标记冲突文件为已解决git add 冲突文件名 # 或 git add . 处理所有文件\# 提交解决冲突的结果git commit -m "resolve conflicts with develop"
7)推送到远程分支
解决后推送到远程,PR 会自动更新为 “可合并” 状态:
bash 运行git push origin feature/A
3、避免合并冲突的最佳实践
- 频繁同步代码:每天至少从目标分支(如 develop)同步一次最新代码到自己的功能分支,减少冲突积累。
- 小步提交:每次只提交相关的少量修改,避免一次修改大量文件。
- 分工明确:团队成员尽量负责不同文件或同一文件的不同部分,减少重叠修改。
- 及时合并:功能完成后尽快创建 PR 并合并,避免分支长期脱离主分支。
