
文章目录一. 多人协作一二. 多人协作二一. 多人协作一目标远程 master 分支下 file.text 文件新增代码 “aaa”、“bbb”实现由开发者1新增 “aaa”、开发者2新增 “bbb”条件在一个分支下协作完成。目前我们所完成的工作如下基本完成 Git 的所有本地库的相关操作git 基本操作分支理解版本回退冲突解决等等。申请码云账号将远端信息 clone 到本地以及推送和拉取。是时候干最重要的一件事情了实现多人协作开发为了做这件事情我们需要先做一些准备工作。我们之前已经将项目 clone 到了指定目录如我们在 windows 环境下再 clone 同一个项目仓库来模拟和你一起协作开发的另一名小伙伴Shift 右键Clone 成功注意这里是模拟了两个用户实际开发中每个用户都有自己的 gitee/github 账号如果要多人进行协同开发必须要将用户添加进开发者用户才有权限进行代码提交到此相当于有了两个用户分别在 linux 和 windows 上针对于同项目进行协作开发我们的准备工作到此结束。目前我们的仓库中只有一个 master 主分支但在实际的项目开发中在任何情况下其实都是不允许直接在 master 分支上修改代码的这是为了保证主分支的稳定。所以在开发新功能时常常会新建其他分支供开发时进行迭代使用。那么接下来就让我们在 gitee 上新建 dev 远程分支供我们使用创建成功创建成功的远程分支是可以通过 Git 拉取到本地来以实现完成本地开发工作。接下来让我们和另一名开发的小伙伴都将远程仓库进行一次拉取操作并观察结果。之前讲的 git branch 其实只能查看本地分支要查看远程分支需要加上 -r 选项。但前提是要 pull 一下拉取最新的远端仓库才能看到最新的内容。对于我们要操作的是基于远程分支 origin/dev 创建一个本地分支 dev建立连接并立即切换到它拉取后便可以看到远程的 dev 分支接着切换到 dev 分支供我们进行本地开发。要说明的是我们切换到的是本地的 dev 分支根据示例中的操作会将本地分支和远程分支的进行关系链接。查看如下对于小伙伴要操作的是注意这里不是 git checkout -b dev origin/dev意味着没有与远程的 dev 分支建立连接如下查看直接使用 git pull 由于没有建立连接关系拉取失败现在你和你的小伙伴就可以在 dev 上完成开发。首先让我们在 dev 分支上进行一次开发并 push 到远程。例如让我们来看看码云上目前仓库的状态至此我们已经将代码成功推送至码云接下来假如你的小伙伴要和你协同开发碰巧也要对 file.txt 文件作修改并试图推送例如这时推送失败因为你的小伙伴的最新提交和你推送的提交有冲突解决办法也很简单Git 已经提示我们先用 git pull 把最新的提交从 origin/dev 抓下来然后在本地进行合并并解决冲突再推送。操作如下手动解决冲突重新推送此时我们看到远端的码云已经能看到我们的新提交了由此两名开发者已经开始可以进行协同开发了不断的 git pull/add/commit/push 遇到了冲突就使用我们之前讲的冲突处理解决掉冲突。对于你来说要想看到小伙伴的代码只需要 pull 一下即可例如最后不要忘记虽然我们是在分支上进行多人协作开发但最终的目的是要将开发后的代码合并到 master 上去让我们的项目运行最新的代码。接下来我们就需要做这件事情了方式一PR 工单操作方式二命令操作拉取 dev 分支获得小伙伴写的代码切换至 master 分支pull 一下保证本地的 master 是最新内容。合并前这么做是一个好习惯。切换至 dev 分支合并 master 分支这么做是因为如果有冲突可以在 dev 分支上进行处理而不是在 master 上解决冲突。这么做是一个好习惯。git merge 命令用于将其他分支的提交合并到当前分支。合并会产生冲突是因为 Git 无法自动判断 “同一处代码被不同分支以不同方式修改时哪一个才是对的”。切换至 master 分支合并 dev 分支。切换至 master 分支合并 dev 分支。将 master 分支推送至远端。此时查看远端仓库master 已经是最新代码了此时dev 分支对于我们来说就没用了那么 dev 分支就可以被删除掉。我们可以直接在远程仓库中将 dev 分支删除掉总结一下在同一分支下进行多人协作的工作模式通常是这样首先可以试图用 git push origin branch-name 推送自己的修改。如果推送失败则因为远程分支比你的本地更新需要先用 git pull 试图合并。如果合并有冲突则解决冲突并在本地提交。没有冲突或者解决掉冲突后再用 git push origin branch-name 推送就能成功功能开发完毕将分支 merge 进 master最后删除分支。二. 多人协作二目标远程 master 分支下新增 function1 和 function2 文件。实现由开发者1新增 function1 文件、开发者2新增 function2 文件。条件在不同分支下协作完成。一般情况下如果有多需求需要多人同时进行开发是不会在一个分支上进行多人开发而是一个需求或一个功能点就要创建一个 feature 分支。现在同时有两个需求需要你和你的小伙伴进行开发那么你们俩便可以各自创建一个分支来完成自己的工作。在上个部分我们已经了解了可以从 gitee 上直接创建远程分支 (更推荐这是最新的代码)其实在本地创建的分支也可以通过推送的方式发送到远端 (不太推荐可能需要 git pull 拉取最新的代码)。在这个部分我们就来采用一下这种方式。对于你来说可以进行以下操作新增本地分支 feature-1 并切换新增需求内容-创建 function1 文件。将 feature-1 分支推送到远端注意由于没有建立连接不能直接使用 git push对于小伙伴来说可以进行以下操作首先需要拉取 master 上最新的代码。同理新增本地分支 feature-2 并切换新增需求内容-创建 function2 文件将 feature-1 分支推送到远端。注意这里的 feature-2 分支是没有与远程的 feature-2 分支建立连接的此时在本地你看不见他新建的文档他看不见你新建的文档。并且推送各自的分支时并没有任何冲突你俩互不影响用起来很舒服再来看下远端码云上此时的状态对于你的 feature-1 分支对于小伙伴的 feature-2 分支正常情况下你俩就可以在自己的分支上进行专业的开发了但天有不测风云你的小伙伴突然生病了但需求还没开发完需要你帮他继续开发于是他便把 feature-2 分支名告诉你了。这时你就需要在自己的机器上切换到 feature-2 分支帮忙继续开发要做的操作如下拉取 feature-2 分支不需要建立连接直接使用 git pull 即可拉取分支的内容才需要建立连接。基于远程分支 origin/feature-2 创建一个本地分支 feature-2并立即切换到它已建立连接。切换成功后便可以看见 feature-2 分支中的 function2 文件了接着就可以帮小伙伴进行开发查看远程状态推送成功了这时你的小伙伴已经修养的差不多可以继续进行自己的开发工作那么他首先要获取到你帮他开发的内容然后接着你的代码继续开发。或者你已经帮他开发完了那他也需要在自己的电脑上看看你帮他写的代码Pull 无效的原因是小伙伴没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接根据提示设置 feature-2 和 origin/feature-2 的链接即可目前小伙伴的本地代码和远端保持严格一致。你和你的小伙伴可以继续在不同的分支下进行协同开发了。各自功能开发完毕后不要忘记我们需要将代码合并到 master 中才算真正意义上的开发完毕。由于你的小伙伴率先开发完毕于是开始 merg这里使用 PR 工单方式进行合并当你的小伙伴将其代码 merge 到 master 后这是你也开发完成了也需要进行 merge 到 master 操作这里由于不是在同一个文件中进行代码修改所以不存在冲突。如果真存在冲突时使用 PR 工单操作的还就需要在 master 分支上进行手动修改代码解决冲突这样的不安全的。于是你切换至 master 分支pull 一下保证本地的master是最新内容。合并前这么做是一个好习惯。切换至 feature-1 分支合并 master 分支这么做是因为如果有冲突可以在 feature-1 分支上进行处理而不是在 master 上解决冲突。这么做是一个好习惯。通过 git status 发现本地和远程没有区别这是因为本地的 feature-1 和远程的 feature-1 没有建立连接导致的。由于 feature-1 分支已经 merge 进来了新内容为了保证远程分支最新所以需要 push 一下。切换至 master 分支合并 feature-1 分支。这一步就可以使用 PR 工单的操作了也可以使用命令行操作。将 master 分支推送至远端。此时远程仓库的状态此时feature-1 和 feature-2 分支对于我们来说就没用了那么我们可以直接在远程仓库中将分支删除掉这就是多人协作的工作模式一旦熟悉了就非常简单。远程分支删除后本地gitbranch-a依然能看到的解决办法当前我们已经删除了远程的几个分支使用 git branch -a 命令可以查看所有本地分支和远程分支但发现很多在远程仓库已经删除的分支在本地依然可以看到。例如使用命令 git remote show origin可以查看 remote 地址远程分支还有本地分支与之相对应关系等信息。此时我们可以看到那些远程仓库已经不存在的分支根据提示使用 git remote prune origin 命令对于本地的分支使用 git branch -d branch-name 进行删除