【GIT-2】如何正确地与你的队友协作开发#

教程定位:实现多人协作开发,解决代码冲突,提高开发效率。

明确一下几个重要概念,不用背,用久了就懂了:

- 分支(Branch):用来实现不同功能的开发

- 合并(Merge):将不同分支的代码合并到一起

为什么要使用GIT#

  • 版本控制:可以追踪文件的变化

  • 代码安全:可以恢复到任意版本

  • 🌟分支管理:并行开发,实现不同功能的开发

  • 🌟团队协作:多人协作开发而不发生冲突

../../_images/devflow2.png

这张图很好地说明了多人协作开发的流程,每个人都有自己的分支,开发完成后合并到主分支。

如何使用GIT:【场景2】多人协作开发#

1. 小A创建了一个分支用于开发新功能AAA#

git branch feature/AAA # 创建一个新的分支
git checkout feature/AAA # 切换到新的分支

新分支的内容是从当前分支复制过来的,所以新分支的内容和当前分支是一样的。

2. 修改代码#

在新分支上修改readme.md,末尾添加一行文字,推送到远程仓库。

git add . # 将所有修改添加到暂存区
git commit -m "feat: add new feature AAA" # 提交到版本库
git push origin feature/AAA # 推送到远程仓库

3. 同时小B也创建了一个分支用于开发新功能BBB#

此时小b并不知道小A的分支,所以小B是基于主分支创建的新分支。(这里切回主分支来模拟这个场景)

git checkout master # 切回主分支
git branch feature/BBB # 创建一个新的分支
git checkout feature/BBB # 切换到新的分支

4. 修改代码#

假设小b也修改了readme.md,末尾添加一行文字,但内容不同,推送到远程仓库。

git add . # 将所有修改添加到暂存区
git commit -m "feat: add new feature BBB" # 提交到版本库
git push origin feature/BBB # 推送到远程仓库

5. 小A快人一步,先请求合并#

小A在github上发起一个合并请求,请求将feature/AAA合并到master分支。

仓库页面 -> Pull requests -> New pull request -> base: master <- compare: feature/AAA -> Create pull request

仓库管理者小C收到了小A的请求,查看代码,发现没有问题,合并。

6. 小B请求合并#

小B在github上发起一个合并请求,请求将feature/BBB合并到master分支。

仓库页面 -> Pull requests -> New pull request -> base: master <- compare: feature/BBB -> Create pull request

仓库管理者小C收到了小B的请求,查看代码,发现和小A的代码有冲突,无法直接合并。

为什么冲突呢?因为小A和小B修改了同一个地方的代码,但是写入的内容不相同,这时候git不知道应该保留哪个,所以需要人工处理。

所以呢,小C通知小B解决冲突。

7. 解决冲突#

小B需要解决冲突,将冲突的地方修改为小A和小B的代码都有的内容,然后提交。

仓库页面 -> Pull requests -> feature/BBB -> Resolve conflicts -> Command line

依次执行以下命令:

# Step 1: Clone the repository or update your local repository with the latest changes.
git pull origin master
# Step 2: Switch to the head branch of the pull request.
git checkout feature/BBB
# Step 3: Fix the conflicts and commit the result. 
# Resolve it in your preferred editor is recommended.
# Step 4: Push the changes to your repository.
git push origin feature/BBB
../../_images/resolv_confilict.png

8. 完成合并#

小B再次请求合并,小C查看代码,发现没有问题,合并。