版本控制: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’」按钮

版本控制:GitHub - 图1

新建的分支会基于当前选择的分支(通常是 main)创建,包含所有相同的代码内容。

方法二:通过本地 Git 命令行新建分支

适合需要在本地开发后再推送到远程的场景:

步骤 1:确保本地代码是最新的
  1. bash 运行
  2. \# 切换到主分支(如 main
  3. git checkout main
  4. \# 拉取远程最新代码,保证本地与远程同步
  5. git pull origin main
步骤 2:创建并切换到新分支
  1. bash 运行
  2. \# 创建并立即切换到新分支(推荐)
  3. git checkout -b 新分支名
  4. \# 示例:创建一个用户头像功能的分支
  5. git checkout -b feature/user-avatar
步骤 3:将本地新分支推送到 GitHub 远程
  1. bash 运行
  2. \# 推送新分支到远程仓库
  3. git push -u origin 新分支名
  4. \# 示例
  5. 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)是最新的:

  1. bash 运行
  2. git checkout develop
  3. git pull origin develop

2)切换到自己的功能分支

  1. bash 运行
  2. git checkout feature/A

3)合并目标分支到自己的分支

主动将 develop 分支的代码合并到你的功能分支,触发冲突:

  1. bash 运行
  2. git merge develop

此时终端会提示 “Automatic merge failed… fix conflicts and then commit the result”

4)查看冲突文件

执行 git status 可看到标为「both modified」的冲突文件

5)解决冲突

用编辑器打开冲突文件,找到冲突标记并修改:

  1. plaintext 运行
  2. <<<<<<< HEAD(你的分支修改)
  3. 这是我写的代码
  4. \=======
  5. 这是同事写的代码
  6. \>>>>>>> develop(目标分支修改)
  • 协商后保留正确代码(可同时保留双方有价值的修改)
  • 必须删除所有冲突标记

6)标记为已解决并提交

  1. bash 运行
  2. \# 标记冲突文件为已解决
  3. git add 冲突文件名 # 或 git add . 处理所有文件
  4. \# 提交解决冲突的结果
  5. git commit -m "resolve conflicts with develop"

7)推送到远程分支

解决后推送到远程,PR 会自动更新为 “可合并” 状态:

  1. bash 运行
  2. git push origin feature/A

3、避免合并冲突的最佳实践

  • 频繁同步代码:每天至少从目标分支(如 develop)同步一次最新代码到自己的功能分支,减少冲突积累。
  • 小步提交:每次只提交相关的少量修改,避免一次修改大量文件。
  • 分工明确:团队成员尽量负责不同文件或同一文件的不同部分,减少重叠修改。
  • 及时合并:功能完成后尽快创建 PR 并合并,避免分支长期脱离主分支。