【Git】多人协作二(不同分支下)

文章目录

  • [1. 多人协作](#1. 多人协作)
  • [2. 创建分支](#2. 创建分支)
    • [2.1 开发者 Tom](#2.1 开发者 Tom)
    • [2.2 开发者 Harry](#2.2 开发者 Harry)
    • [2.3 查看分支](#2.3 查看分支)
  • [3. 开发者 Tom 在 feature-2 分支下开发](#3. 开发者 Tom 在 feature-2 分支下开发)
  • [4. 开发者 Harry 在 feature-2 分支下开发](#4. 开发者 Harry 在 feature-2 分支下开发)
  • [5. 将各自开发的内容合并到 main 分支](#5. 将各自开发的内容合并到 main 分支)
    • [5.1 开发者 Harry 进行 merge](#5.1 开发者 Harry 进行 merge)
    • [5.2 开发者 Tom 进行 merge(需要解决冲突)](#5.2 开发者 Tom 进行 merge(需要解决冲突))
  • [6. 远程分支删除后,本地 gitbranch -a 依然能看到的解决办法](#6. 远程分支删除后,本地 gitbranch -a 依然能看到的解决办法)
  • [7. 总结](#7. 总结)

1. 多人协作

一般情况下,如果有多需求需要多人同时进行开发,是不会在一个分支上进行多人开发,而是一个需求或一个功能点就要创建一个 feature 分支。

现在同时有两个需求需要你和你的小伙伴进行开发,那么你们俩便可以各自创建一个分支来完成自己的工作。在【多人协作(一)】中,我们已经了解了可以从远端仓库上直接创建远程分支,其实在本地创建的分支也可以通过推送的方式发送到远端。在这个部分我们就来用一下这种方式。

本次实验内容如下:

  • 目标:远程 main 分支下新增 function1function2 文件。
  • 实现:由开发者 Tom 新增 function1 文件,由开发者 Harry 新增 function2 文件。
  • 条件:在不同分支下协作完成,各自让某一个功能私有某一个分支。

2. 创建分支

2.1 开发者 Tom

对于开发者 Tom 来说,可以进行以下操作:

bash 复制代码
# 查看当前所在分支
git branch -a

# 新增本地分支 feature-1 并切换
git checkout -b feature-1

# 新增需求内容 - 创建 function1 文件
vim function1
cat function1 

# 将 feature-1 分支推送到远端
git add function1
git commit -m "add function1"
git push origin feature-1

结果如下:

2.2 开发者 Harry

我们在上一篇文章中,Harry 用户下的 main 分支不是最新的代码,所以我们要先切换到 main 分支下,然后拉取最新的代码。

bash 复制代码
# 查看当前所在分支
git branch -a

# 切换到 main 分支
git checkout main

# 拉取最新的代码
git pull

结果如下:

对于开发者 Harry 来说,可以进行以下操作:

bash 复制代码
# 新增本地分支 feature-2 并切换
git checkout -b feature-2

# 新增需求内容 - 创建 function2 文件
vim function2
cat function2

# 将 feature-2 分支推送到远端
git add function2
git commit -m "add function2"
git push origin feature-2

结果如下:

2.3 查看分支

此时,在本地,你看不见他新建的文档,他看不见你新建的文档。并且推送各自的分支时,并没有任何冲突,你俩互不影响,用起来很舒服!!

再来看下远端仓库上此时的状态:

对于 Tom 用户的 feature-1 分支:

对于 Harry 用户的 feature-2 分支:

正常情况下,你俩就可以在自己的分支上进行专业的开发了!

3. 开发者 Tom 在 feature-2 分支下开发

但天有不测风云,你的小伙伴 Harry 突然生病了,但需求还没开发完,需要你帮他继续开发,于是他便把 feature-2 分支名告诉你了。这时你就需要在自己的机器上切换到 feature-2 分支帮忙继续开发,要做的操作如下:

bash 复制代码
# 必须先拉取远端仓库内容
git pull 

# 可以看到远程已经有了 feature-2 分支了
git branch -a

# 切换到 feature-2 分支上,可以和远程的 feature-2 分支关联起来
# 如果不关联的话,将来使用 git push 推送内容会失败
git checkout -b feature-2 origin/feature-2

结果如下:

切换成功后,便可以看见 feature-2 分支中的 function2 文件了,接着就可以帮小伙伴进行开发:

bash 复制代码
# 继续开发
vim function2 
cat function2 

# 推送内容
git add function2
git commit -m "modify function2"
git push

结果如下:

查看远程仓库状态,推送成功了:

4. 开发者 Harry 在 feature-2 分支下开发

这时,你的小伙伴 Harry 已经修养的差不多,可以继续进行自己的开发工作,那么他首先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在自己的电脑上看看你帮他写的代码:

bash 复制代码
# 拉取最新的代码
git pull

结果如下:此时,我们发现代码竟然没有拉取成功?

Pull 无效的原因是 Harry 没有指定本地 feature-2 分支与远程 origin/feature-2 分支的链接,根据提示,设置 feature-2 和 origin/feature-2 的链接即可:

bash 复制代码
# 建立链接
git branch --set-upstream-to=origin/feature-2 feature-2

# 重新拉取最新的代码
git pull

结果如下:

目前,Harry 的本地代码和远端保持严格一致,接着 Harry 用户可以继续在该分支下进行开发了。

bash 复制代码
# 继续开发
vim function2 
cat function2 

# 推送内容
git add function2
git commit -m "function2 finish"
git push 

结果如下:

查看远程仓库状态,推送成功了:

5. 将各自开发的内容合并到 main 分支

各自功能开发完毕后,不要忘记我们需要将代码合并到 main 中才算真正意义上的开发完毕。

5.1 开发者 Harry 进行 merge

由于 Harry 用户率先开发完毕,于是开始 merge。

1️⃣ 切换至 main 分支,然后 pull 一下,保证本地的 main 是最新内容

bash 复制代码
git checkout main
git pull

结果如下:

2️⃣ 切换至 feature-2 分支,然后合并 main 分支

bash 复制代码
git checkout feature-2
git merge main

结果如下:

3️⃣ 切换至 main 分支,然后合并 feature-2 分支

bash 复制代码
git checkout main
git merge feature-2

结果如下:

4️⃣ 将 main 分支推送到远端

bash 复制代码
git push
git status

结果如下:

此时远程仓库的状态:

5.2 开发者 Tom 进行 merge(需要解决冲突)

1️⃣ 切换至 main 分支,然后 pull 一下,保证本地的 main 是最新内容(合并前这么做是一个好习惯)

bash 复制代码
git checkout main
git pull

结果如下:因为 Harry 用户已经把 feature-2 的内容合并到 main 分支上了,所以此时 main 分支是有更新的。

2️⃣ 切换至 feature-1 分支,然后合并 main 分支(这么做是因为此时有冲突,那么可以在 feature-1 分支上进行处理,而不是在 main 上解决冲突。)

bash 复制代码
git checkout feature-1
git merge main

结果如下:

3️⃣ 由于本地 feature-1 分支已经 merge 进来了新内容,为了保证远程 feature-1 分支最新,所以最好先 push 一下。

  • 要 push 的另一个原因是因为在实际的开发中,main 的 merge 操作一般不是由我们自己在本地行操作,其他人员或某些平台 merge 时,操作的肯定是远程分支,所以就要保证远程分支的最新。
  • 如果 merge 出现冲突,此时需要 commit 才可以 push 成功(下面 merge 操作并没有出现冲突)
bash 复制代码
# 查看链接状态
git branch -vv

# 由于我们并没有把本地的feature-1分支和远程的feature-1建立链接,
# 所以需要使用长命令来推送
git push origin feature-1

结果如下:

此时,在远程仓库的 feature-1 分支也更新了内容:

4️⃣ 切换至 main 分支,然后合并 feature-1 分支

bash 复制代码
git checkout main
git merge feature-1

结果如下:

5️⃣ 将 main 分支推送到远端

bash 复制代码
git push origin main

结果如下:

此时远程仓库的状态:

此时,feature-1feature-2 分支对于我们来说就没用了,那么我们可以直接在远程仓库中将它们删除掉:

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

6. 远程分支删除后,本地 gitbranch -a 依然能看到的解决办法

当前我们已经删除了远程的几个分支,使用 git branch -a 命令可以查看所有本地分支和远程分支,但发现很多在远程仓库已经删除的分支在本地依然可以看到。例如:

bash 复制代码
# 查看
git branch -a

结果如下:

使用命令 git remote show origin,可以查看 remote 地址、远程分支,还有本地分支与之相对应关系等信息。

bash 复制代码
git remote show origin

结果如下:

此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令:

bash 复制代码
# 修剪分支
git remote prune origin

# 查看本地分支
git branch -a

结果如下:可以看到,此时就删除了那些远程仓库不存在的分支。

但是本地仓库的分支还在,对于本地仓库的删除,直接使用 git branch -d [分支名] 即可:

bash 复制代码
git branch -d dev feature-1 feature-2

结果如下:

同样,在 Harry 用户下也进行一样的操作:

7. 总结

协同开发完成后,在进行合并操作时,为了不让 main 分支出错,我们可以进行下面的操作。

如下图所示:

相关推荐
C+++Python4 小时前
如何使用 VS Code 进行 Git 管理?
git
用户3835514240285 小时前
git 删除历史记录或历史大文件后 提交历史记录到新的仓库
git
kqz20145 小时前
主分支下某个文件夹的git记录同步到开发分支
git
数据大魔方6 小时前
【期货量化实战】豆粕期货量化交易策略(Python完整代码)
开发语言·数据库·python·算法·github·程序员创富
午安~婉7 小时前
整理Git
前端·git
逛逛GitHub7 小时前
这 2 个 Skills 开源项目,最近在 GitHub 上火了。
github
脑壳疼___7 小时前
springAi集成es向量库
大数据·elasticsearch·搜索引擎
飞翔沫沫情7 小时前
关于在Jenkins 的job 中隐藏shared library 共享库相关的Git信息
运维·git·jenkins
秃秃秃秃哇7 小时前
svn学习记录
svn