1、 1 / 10Git源代码管理规范一、 分支管理使用 git 进行源代码管理,一般将某个项目的所有分支分为以下几条主线:1. Master顾 名 思 义 , 既 然 名 字 叫 Master, 那 么 该 分 支 就 是 主 分 支 的 意 思 。 master 分 支 永 远是 production-ready 的 状 态 , 即 稳 定 可 产 品 化 发 布 的 状 态 。2. Develop这 个 分 支 就 是 我 们 平 常 开 发 的 一 个 主 要 分 支 了 , 不 管 是 要 做 新 的 feature 还 是 需 要 做bug fix, 都 是 从 这 个 分 支 分 出
2、 来 做 。 在 这 个 分 支 下 主 要 负 责 记 录 开 发 状 态 下 相 对 稳 定的 版 本 , 即 完 成 了 某 个 feature 或 者 修 复 了 某 个 bug 后 的 开 发 稳 定 版 本 。3. Feature branches这 是 由 许 多 分 别 负 责 不 同 feature 开 发 的 分 支 组 成 的 一 个 分 支 系 列 。 new feature主 要 就 在 这 个 分 支 系 列 下 进 行 开 发 。 当 功 能 点 开 发 测 试 完 毕 之 后 , 就 会 合 并 到develop 分 支 去 。4. release branch
3、es这 个 分 支 系 列 从 develop 分 支 出 来 , 也 就 是 预 发 分 支 。 在 预 发 状 态 下 , 我 们 往 往 会 进行 预 发 环 境 下 的 测 试 , 如 果 出 现 缺 陷 , 那 么 就 在 该 release 分 支 下 进 行 修 复 , 修 复 完毕 测 试 通 过 后 , 即 分 别 并 入 master 分 支 后 develop 分 支 , 随 后 master 分 支 做 正 常发 布 。2 / 105. Hotfix branches这 个 分 支 系 列 也 就 是 我 们 常 说 的 紧 急 线 上 修 复 , 当 线 上 出 现
4、bug 且 特 别 紧 急 的 时 候 ,就 可 以 从 master 拉 出 分 支 到 这 里 进 行 修 复 , 修 复 完 成 后 分 别 并 入 master 和develop 分 支 。下 面 这 张 图 将 完 整 展 示 这 一 个 流 程3 / 10二、 工作原理Git 的工作方式:也就是说,每次提交版本变动的时候,git 会保存一个快照 (snapshot)。如果文件没有被更改,git 也不会再次保存,而是提供一个到原来文件的链接。这样一来,git 更像是一个小型的文件系统。此外,git 的所有操作都可以是本地的,仅仅在将新版本的内容上传到服务器上时才需要连接网络。4 /
5、10Git目录(repository)是 Git 保存元数据和对象数据库的地方。这也是 Git 最重要的部分。工作目录(working directory)是项目某个版本的内容。暂存区(staging area)是一个简单的文件,通常包含在 Git 目录中。其中存储了将要进入下一次提交的信息。Git 的基本工作流程如下:修改暂存提交G i t a d d G i t c o m m i t1.在工作目录中修改文件。2.标识(stage)文件,并将文件快照添加到暂存区。3.执行 commit,将获取暂存区中的文件,并将快照永久保存到 Git 目录中。三、 常用命令1. 创建工程 git init
6、2. 提交修改 git add 后 就 从 修 改 变 为 暂 存 git commit 后 就 从 暂 存 变 为 提 交 。3. 提交规范在 commit 时 ,如 果 有 对 应 PR( 需 求 项 ) , 请 在 第 一 行 写 上 PR 号 , 然 后 再 描 述 信 息( 另 起 行 ) , 并 把 涉 及 到 改 动 的 文 件 名 附 上 。5 / 104. 回溯改 错 了 , 不 过 还 没 有 git add git reset -hard改 错 了 , 已 经 git add git reset -q files(其 实 就 是 git add 的 反 向 操 作 )改
7、错 了 , 已 经 git commit git reset -soft HEAD(其 实 就 是 git commit 的 反 向 操 作 )已 经 git commit, 忘 记 写 注 释 ( PR) 或 者 漏 提 交 了 部 分 文 件如 果 添 加 注 释 可 以 直 接 执 行 命 令 git commit -amend, 填 写 注 释 保 存如 果 添 加 文 件 先 执 行 git add 后 执 行 git commit -amend5. 创建分支查 看 分 支 git branch切 换 分 支 git checkout branch name创 建 分 支 (在 当
8、前 代 码 的 基 础 上 ) git branch branch name6 / 106. 合并分支先 检 出 目 标 分 支 再 把 其 他 分 支 合 并 进 去 git checkout branch name git merge other_branch7. 删除分支 git branch -d branch name(不 能 删 ? 用 这 个 ! ) git branch -D branch name8. 标签管理git tag v1.09. 远程操作克隆远程库 git clone定义远程库 git remote从远程库取回更新 git fetch从远程库取回更新并合并 git
9、pull推送至远程库 git push7 / 10四、 操作流程(本地)1. 准备工作初始化目录 git init git add readme.md git commit -m master init然 后 从 master 分 支 中 拉 出 develop 分 支 git checkout -b develop2. 功能点开发有 新 的 需 求 或 功 能 点 需 要 开 发 时 , 从 最 新 develop 分 支 中 拉 出 一 个 feature 分 支 git checkout -b feature name完 成 feature 开 发 后 需 要 对 feature 分 支
10、 进 行 合 并 操 作 git checkout develop git merge feature name3. 处理冲突当 合 并 分 支 出 现 冲 突 时 , 需 要 手 动 将 文 件 冲 突 的 部 分 进 行 修 改 。 对 修 改 后 的 文 件 保 存并 重 新 提 交 。4. 产品发布当 develop 分 支 已 经 达 到 了 一 个 可 以 发 布 的 状 态 , 将 最 新 的 develop 分 支 拉 出 来 成为 一 个 release 分 支8 / 10 git checkout -b release假 设 需 要 一 些 环 境 配 置 , 新 建 配
11、置 文 件 并 提 交 git add release.config git commit -m release1当 遇 到 一 些 预 发 环 境 下 的 bug, 这 个 时 候 我 就 直 接 在 release 分 支 下 进 行 修 复 演 进 ,如 果 bug 问 题 很 大 , 则 需 要 重 新 并 入 develop 中 , 拉 出 新 的 feature 进 行 开 发 重 构 。如 果 预 发 一 切 正 常 , 需 要 将 release 分 支 同 时 并 入 master 分 支 和 develop 分 支 ,master 分 支 供 线 上 发 布 , devel
12、op 分 支 供 下 次 开 发 演 进 。 git checkout master git merge release name git checkout develop git merge release name5. 线上 bug 热修复当 碰 到 一 些 线 上 意 想 不 到 的 bug, 需 要 紧 急 修 复 时 , 就 直 接 从 master 分 支 拉 出hotfixes 分 支 进 行 修 复 。 git checkout master git checkout -b hotfix namebug 修 复 完 毕 , 测 试 通 过 后 我 们 将 分 支 合 并 到 m
13、aster 和 develop 中 去 。 git checkout develop git merge hotfix name git checkout master git merge hotfix name9 / 10五、 远程操作远 程 操 作 的 5 个 常 用 命 令 git clone git remote git fetch git pull git push1. 从远程主机克隆一个版本库 git clone 该 命 令 会 在 本 地 主 机 生 成 一 个 目 录 , 与 远 程 主 机 的 版 本 库 同 名 。2. 管理主机名为 了 便 于 管 理 , Git 要 求
14、每 个 远 程 主 机 都 必 须 指 定 一 个 主 机 名 。不 带 选 项 的 时 候 , git remote 命 令 列 出 所 有 远 程 主 机 。3. 将更新取回本地 git fetch 10 / 10默 认 情 况 下 , git fetch 取 回 所 有 分 支 ( branch) 的 更 新 。 如 果 只 想 取 回 特 定 分 支 的更 新 , 可 以 指 定 分 支 名 。 git fetch git branch 命 令 的 -r 选 项 , 可 以 用 来 查 看 远 程 分 支 , -a 选 项 查 看 所 有 分 支 。取 回 远 程 主 机 的 更 新
15、以 后 , 可 以 在 它 的 基 础 上 , 使 用 git checkout 命 令 创 建 一 个 新的 分 支 。 git checkout -b newBrach origin/master也可以使用 git merge 命令或者 git rebase 命令,在本地分支上合并远程分支。 git merge origin/master或者 git rebase origin/master4. 取回更新同时合并到本地git pull 命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。 git pull :如果远程分支是与当前分支合并,则冒号后面的部分可以省略。 git pull origin next上面命令表示,取回 origin/next 分支,再与当前分支合并。实质上,这等同于先做 git fetch,再做 git merge。 git fetch origin git merge origin/next