在日常开发中,Git 是我们常用的版本控制工具。通过频繁的代码推送与合并,最终汇聚成完整的项目。对于一个开发团队而言,遵循一套规范的 Git 流程有助于减少代码冲突、保障协作顺畅。
然而作为开发人员,尤其是刚加入团队的新成员,仅仅熟悉规范还不够,更需要对 Git 有深入的理解。只有这样,才能在规范无法覆盖的特殊情况下,从容应对、灵活解决。
本文旨在熟悉开发过程中git使用流程,命令行几乎不会用。大多数的开发工具都包含git管理,但在翻译成中文时候可能与英文命令的意思有差异,还需甄别。
1.入门
对于个人开发而言,一个程序所有代码都归一人拥有,git对他而言就是版本控制,以便应对:“还是第一版好”的情况,这时候对git的使用仅包括两个命令:提交和推送。
提交
git commit -m "提交内容"// 向本地仓库提交代码推送
git push <远程主机名> <本地分支名>:<远程分支名>// 将本地仓库向远程仓库推送如
git push origin master:master要将本地的 master 分支推送到远程仓库 origin 的 master 分支
这里需要注意下本地仓库和远程仓库的概念。一般而言,远程仓库往往代表着最终的产品,而本地仓库一般代表当前阶段的版本,但当前阶段的版本可能会进行修改变动,并不代表最终的版本,所以一般的开发流程是:
本地测试完成完毕——》符合要求——》推送至远程
Q:可以直接推送到远程嘛?
A:确实没法阻止你这样做,但不符合规范,容易挨批。
Q:可以随便写一点就提交/推送嘛?
A:不建议,建议一版一版来,至少能保证运行成功
再复杂一点的场景,就是一个产品多个人开发,这就涉及到多人合作,也是常见的开发场景。
根据人员规模可分为多种情况:
第一种
人员规模较低,大家可以用一个分支(一个分支代表连着一个远程仓库)
开发流程:
- 开发者1从远程(
git fetch)拉取最新代码到本地进行开发 - 开发完成
- 提交(
git commit)到本地 - 推送(
git push)到远程 - 开发者2从远程拉取最新代码到本地进行开发
不涉及分支合并,但推送时候可能涉及冲突。
graph TD
开发者1 -->|master| 最终产品
开发者2 -->|master| 最终产品
开发者3 -->|master| 最终产品
第二种 涉及多分支开发时候,(master-1\master-2\master-3是从master开辟的新分支),对开人员而言,大致操作步骤不变,但涉及到其他分支时候,需要分支合并,因为,masetr才是最终产品,你推送到的远程是master-1\master-2\master-3,而不是master,所以你需要将你分支上的改动推到master分支上(合并分支)。
- 开发者1从远程master-1分支上
拉取最新代码到本地进行开发 - 开发完成
提交到本地仓库推送到当前开发分支master-1的远程仓库上切换master分支(git checkout master),并拉取最新代码- 在master分支上与master-1分支
合并(git merge master-1) - 将master分支
推送到远程 - 开发者2从远程master-2分支上拉取最新代码到本地进行开发
注意事项:
1.要在master分支上与其他分支合并,因为master分支是
大本营,有着来自各个模块的最新的代码,所以应该将master-1的合并到大本营。2.当涉及分支合并时候会伴随着
代码冲突,所谓的冲突是同一个文件的同一行被不同的分支修改,所导致:文件A的这一行,与你代码提交的文件A的这一行数据不一致!这种情况需要本着不影响别人已写好的功能进行处理冲突。
graph TD
开发者1 --> 功能模块1 -->|master-1| 产品-->|master| 最终产品
开发者2 --> 功能模块2 -->|master-2| 产品
开发者3 --> 功能模块3 -->|master-3| 产品
第三种
是第二种情况的变体,这种情况下,master-1这种子分支并不专属一个人,也就是说会多一种在推送master-1分支时候就可能会出现冲突。其整体开发步骤对开发者而言并无变化。
graph TD
开发者1 --> 功能模块1 -->|master-1| 产品-->|master| 最终产品
开发者1-1 --> 功能模块1
开发者2 --> 功能模块2 -->|master-2| 产品
开发者2-1 --> 功能模块2
开发者3 --> 功能模块3 -->|master-2| 产品
开发者3-1 --> 功能模块3
二、指令熟悉
git是个强大的工具,并不一定非得管理代码,也可以管理任何文件。
如何安装配置git,本文不进行阐述。
1.如何将文件交给git管理?
首先,你得创建个本地仓库,在你要管理的文件目录使用git init初始化仓库;
然后,使用将你的文件添加到仓库管理的范围内,使用git add <filename>其中filename是指要管理的文件名,大多数情况下建议使用git add .,意味着将这个目录所有的文件交给git管理。
2.如何创建分支?
使用git checkout -b <branchname>创建分支并切换到该分支。