一 引言

这一篇文章还是记录我在杭州工作的总结。

我刚来公司的时候,对Git的使用很头痛,因为在学校里面很少用这个东西,即使用,一般也只有一个分支,不会出现代码冲突和代码合并的情况。但是公司里面一个项目组有那么多的人,无法避免代码冲突和合并。从开始的战战兢兢到后来教新人使用Git,也算是一个成长吧,记录一下我总结的使用方法。

二 关于冲突

公司里面用的是GitLab,其实和GitHub是一个道理。在团队协作时,合并代码的过程中出现冲突时非常正常的一件事,并不是错误。所以也不要害怕冲突,更不能试图掩盖掉冲突。我们知道一般一个项目会有很多的文件,包括源代码,文档等,冲突的根源是两个Git账号对同一个文件做了修改,也就是说,如果你和同事修改或者新增的不是同一个文件,并不会产生冲突。

三 没有冲突时的代码提交流程

在大部分时候,团队协作不会产生冲突,因为每个人负责的模块不一样,不会修改同一个文件。

一般一个项目有三类分支,master分支:项目上线的时候用的,develop分支:所有开发人员共有的分支,以及开发人员自己的分支,像我的一般就是xiajun

Git在商业项目中的使用流程-LMLPHP

先设定一个情景,比如你昨晚下班的时候提交了代码,并且和同事的代码合并过了,然后今天上午你又写了很多代码,到了午饭时间,你准备提交新的代码。你需要按照以下步骤进行。

A 查看你在哪个分支,切换到xiajun分支(即自己名字命名的分支):

Git在商业项目中的使用流程-LMLPHP

B git add 你要提交的文件或者文件夹。作用是将修改提交到暂存区,比如我们修改了根目录下的 file3.txt 和 dir2 目录下的 dir2_file2.txt:

Git在商业项目中的使用流程-LMLPHP

C git commit
提交信息。将暂存区里面的内容提交到本地仓库,即你本机的仓库。提交信息一般用英文。

Git在商业项目中的使用流程-LMLPHP

D 拉取远程develop分支的代码,因为你的同事在上午的时候可能修改了develop的代码:

Git在商业项目中的使用流程-LMLPHP

上午有一个同事在根目录下面加了一个file2.txt,因为和我们修改的不是一个文件,所以没有冲突

E 使用git status查看提交哪些文件修改了没有提交:

Git在商业项目中的使用流程-LMLPHP

这一步是必做的,防止有代码的修改,而忘了提交。

F 将代码推到名字为xiajun的远程分支:

Git在商业项目中的使用流程-LMLPHP

G 在浏览器上进行代码的合并:

打开GitHub:

Git在商业项目中的使用流程-LMLPHP

点击上面的按钮:

Git在商业项目中的使用流程-LMLPHP

点击上面的按钮,要注意选择好源分支和目标分支,源分支是xiajun,目标分支是develop。

Git在商业项目中的使用流程-LMLPHP

上面的提示告诉我们这次的合并没有冲突。点击绿色的按钮:

Git在商业项目中的使用流程-LMLPHP

写好合并信息后,就可以Confirm merge了。然后我们可以去develop分支查看一下自己的修改是否合并了过去:

Git在商业项目中的使用流程-LMLPHP

上面的乱码就是我这次提交的内容。

这个过程的分支的流程大致是:远程的develop -> 本地的xiajun -> 远程的xiajun -> 远程的develop

四 有冲突时的代码提交流程

冲突会在两个地方发生,一是在D那一步,一是在G那一步,D处理起来比较麻烦。

所有流程和上面一模一样,除了D这里要处理一下冲突:

比如同事在file2.txt里面加了一些东西(原来只有一行中文):

Git在商业项目中的使用流程-LMLPHP

而你直接修改了file2.txt:

Git在商业项目中的使用流程-LMLPHP

试图从develop分支拉取代码:

Git在商业项目中的使用流程-LMLPHP

提示我们有冲突,怎么办呢?如果你本来不应该修改这个文件,那就直接拷贝develop中的file2.txt的内容覆盖掉你的。如果你也需要修改这个文件,那就找同事商量。

假设是第一种,我们从浏览器拷贝develop分支的file2.txt的内容到磁盘上的file2.txt,然后重新提交一下这个有冲突的文件:

Git在商业项目中的使用流程-LMLPHP

后面的步骤和上面三里面的内容一样。

五 几个需要注意的地方

1 除了技术Leader以外,一般任何人都不可以动master分支

2 推到远程分支以前,一定要用git status查看自己是否提交了所有修改的内容,没有做这一步可能会忘了提交一些内容,估计Leader会锤你一顿

3 冲突不知道怎么处理的情况下,和与你冲突的同事商量,不能随便冲掉别人的代码

05-02 11:32