多人协作开发指南二
目录
一、多人协作开发指南二
二、清理本地已删除的远程分支:Git 远程分支同步指南
1、问题现象
2、解决方法
方法一:使用 git remote prune 命令(推荐)
1. 查看远程分支状态
2. 清理本地缓存的分支
3. 验证清理结果:
方法二:使用 git fetch 命令同步
3、补充说明
一、多人协作开发指南二
通常情况下,如果有多个需求需要多人并行开发,不会直接在同一个分支上进行协作,而是每个需求或功能点都创建一个独立的 feature 分支。
假设现在有两个需求需要你和同事分别开发,你们可以各自创建一个分支来完成工作。前文已经介绍过如何在码云上直接创建远程分支,其实本地创建的分支也可以通过推送的方式同步到远端。接下来,我们就来实际操作一下这个方法。
对于你来说,可以进行以下操作:
新增本地分支 feature-1 并切换
新增需求内容,创建function1文件
将 feature-1 分支推送到远端
对于小伙伴来说,可以进行以下操作:
首先在从远程仓库克隆下来的gitcode中创建一个空白文档,内容为"Done!",跟上面保持一致!!!
在本地环境中,你无法查看对方新建的文档,对方也看不到你创建的文件。当各自推送分支时不会产生任何冲突,彼此互不干扰,使用体验非常顺畅!现在让我们看看远端码云上的实时状态:
对于你的feature-1分支:
对于小伙伴的feature-2分支:
你们可以各自在专属分支上专注开发。但突发状况时有发生——你的同事因病无法继续完成需求开发,于是将 feature-2
分支交接给你继续开发。这时你需要切换到该分支,具体操作如下:
必须先拉取远端仓库内容
可以看到远程已经有了feature-2
git branch -a
将当前分支切换至feature-2,并与远程的feature-2分支建立关联。若不进行此操作,后续直接使用git push命令推送代码时将会失败。
git checkout -b feature-2 origin/feature-2
这个命令实际上一次性完成了两个操作,可以拆解来看:
git checkout -b feature-2
:
-
checkout
命令用于切换分支。 -
-b
选项告诉 Git创建一个新的分支。 -
feature-2
是你想要在本地创建的新分支的名称。
origin/feature-2
:
-
这是指定新分支的“起点”或“跟踪对象”。(建立跟踪关系(关键):自动设置本地
feature-2
分支跟踪(track) 远程的origin/feature-2
分支) -
origin
是你的远程仓库的默认别名。 -
origin/feature-2
指的是远程仓库(origin)上的feature-2
分支在你本地仓库的缓存。
切换成功后,就能在 feature-2 分支中看到 function2 文件,接下来可以协助小伙伴进行开发:
继续开发、推送内容
查看远程状态,推送成功了:
当你的小伙伴恢复状态后,可以继续开发工作。他需要先获取你帮他开发的内容,接着你的代码继续开发。如果你已经帮他完成了开发,他也需要在自己电脑上查看你编写的代码。
Pull操作失败是因为用户未建立本地feature-2分支与远程origin/feature-2分支的关联。根据提示,只需将本地feature-2分支与远程origin/feature-2分支建立对应关系即可解决。
git branch --set-upstream-to=origin/feature-2 feature-2
这个命令用于手动建立或修改本地分支与远程分支的跟踪关系。
参数解析
-
git branch
:分支管理命令。 -
--set-upstream-to=
或-u
:选项,意为“设置上游分支”。 -
origin/feature-2
:你希望设置为上游(Upstream) 的远程分支。这是跟踪的目标。 -
feature-2
:你当前所在的本地分支。这是需要被设置跟踪关系的分支。
命令的整体作用:将本地已存在的 feature-2
分支的上游(跟踪关系)设置为远程仓库(origin)上的 feature-2
分支。
详细工作流程
当你执行这个命令时,Git 会:
-
检查分支:确认本地的
feature-2
分支存在。 -
检查远程引用:确认远程仓库
origin
上存在feature-2
分支(即origin/feature-2
这个引用存在)。 -
建立关联:在本地仓库的配置中,记录一条信息:“本地分支
feature-2
的跟踪对象是origin/feature-2
”。
建立跟踪关系的好处
这与上一个命令的好处完全相同,是 Git 工作流高效的关键:
-
简化推送 (
git push
):之后当你位于本地feature-2
分支时,只需输入git push
,Git 就知道应该推送到origin/feature-2
,而无需完整地写成git push origin feature-2
。 -
简化拉取 (
git pull
):同样,只需输入git pull
,Git 就会自动从origin/feature-2
拉取最新的更改并合并到本地feature-2
分支,无需指定远程和分支名。 -
状态显示 (
git status
):执行git status
时,它会显示你的本地分支是领先、落后还是已经分叉于其跟踪的远程分支,例如:-
Your branch is up to date with 'origin/feature-2'.
(分支是最新的) -
Your branch is behind 'origin/feature-2' by 1 commit, and can be fast-forwarded.
(你的分支落后了 1 个提交)
-
适用场景
这个命令通常在以下情况下使用:
-
补救未建立跟踪的分支:你之前通过其他方式(如
git checkout -b feature-2
)创建了一个本地分支,并且已经手动将它推送到了远程(git push -u origin feature-2
忘了加-u
选项),导致本地分支没有建立跟踪关系。此时可以用这个命令来补救。 -
设置上游 (
-u选项
):在推送成功后,自动为本地的feature-2
分支设置跟踪关系(Upstream),让其跟踪刚刚推送上去的远程feature-2
分支(即origin/feature-2
)。 -
切换跟踪目标:本地
feature-2
分支原本跟踪的是另一个远程分支(例如origin/old-feature
),现在你想让它改为跟踪origin/feature-2
。 -
重新建立联系:由于某些操作(如重新克隆仓库、远程分支被删除后重建),本地的跟踪关系丢失或失效,需要重新链接。
核心对比:git checkout -b
vs git branch --set-upstream-to
特性 | git checkout -b feature-2 origin/feature-2 | git branch --set-upstream-to=origin/feature-2 feature-2 |
---|---|---|
主要动作 | 创建新分支并切换过去,同时设置跟踪。 | 仅为已存在的本地分支设置或修改跟踪关系。 |
前提条件 | 本地不能有名为 feature-2 的分支。 | 本地必须已经有名为 feature-2 的分支。 |
结果 | 你得到了一个新的本地分支,并且它跟踪远程分支。 | 你现有的本地分支现在开始跟踪远程分支。 |
当前,本地代码与远程仓库已完全同步。你和团队成员可以继续在不同分支上协作开发。完成各自的功能开发后,请记得将代码合并到 master
分支,才算正式完成开发。由于你的队友率先完成开发,已开始进行合并操作:
此时远程仓库的状态如下:
当你的同事将代码合并到 master 分支后,此时你已完成开发,也需要将自己的代码合并到 master 分支,操作步骤如下:
切换到 master 分支,执行 pull 操作确保本地 master 分支内容是最新的。在合并操作前执行这个步骤是个良好的开发习惯。
切换到 feature-1 分支并合并 master 分支的内容。这样可以在 feature-1 分支上处理可能出现的冲突,避免直接在 master 分支上解决冲突,这是一个良好的开发实践。
由于 feature-1 分支已合并了新内容,建议及时推送以确保远程分支保持最新。此外,在实际开发中,master 分支的合并操作通常并非由开发者在本地执行,而是由其他成员或平台直接操作远程分支,因此保持远程分支最新尤为重要。
注意:
- 若合并时出现冲突,请务必先提交(commit)更改后才能推送(push)。
- 还有一点要注意,可能在merge的时候会弹出
nano
文本编辑器的界面,这是Git 自动打开了它,让你为一次 合并提交 (merge commit) 输入说明信息。你输入信息后按Ctrl+O
(保存)和Ctrl + X(退出)
键就可以了。刚开始我很懵,九误操作了,可能导致下面的结果会有错误,体谅一下,我也是学习者,还望包涵)
切换到 master 分支,执行 feature-1 分支的合并操作
将 master 分支推送至远端
此时远程仓库的状态:
此时feature-1和feature-2分支已经完成使命,我们可以直接在远程仓库中删除dev分支:
多人协作的工作模式其实很容易上手,熟悉之后操作起来就会得心应手。
了解即可:开发人员提交代码后,首先触发自动化流水线(pint→P8998 Con→ONE.am)进行初步检查,通过后进入代码审查环节。审查人员对PR(Pull Request)进行评审,重点关注代码质量和功能保障性,评审通过后方可执行合并(merge)操作。
二、清理本地已删除的远程分支:Git 远程分支同步指南
当我们在远程仓库(如 GitHub、Gitee 或 GitLab)中删除了某些分支后,本地执行 git branch -a
命令时,可能会发现这些已被远程删除的分支在本地仍然显示。这是因为本地 Git 仓库会缓存远程分支信息,不会自动同步远程分支的删除状态。
1、问题现象
远程分支删除后,本地执行 git branch -a
仍能看到已删除的远程分支:
git branch -a
即使执行 git pull
后,这些分支仍然存在,因为 git pull
主要获取远程更新而非清理分支。
2、解决方法
方法一:使用 git remote prune
命令(推荐)
1. 查看远程分支状态
执行命令 git remote show origin
可以查看远程仓库地址、远程分支信息以及本地分支与远程分支的对应关系。
git remote show origin
输出结果会标识已失效的分支为 "stale",并提示使用 git remote prune
清理:
2. 清理本地缓存的分支
现在我们能看到远程仓库中已删除的分支,按照提示运行 git remote prune origin
命令即可。
git remote prune origin
此命令会清除本地存储的、远程仓库中已不存在的分支引用。
3. 验证清理结果:
git branch -a
现在已删除的远程分支(如 feature-1
和 feature-2
)不再显示。(但按理来说上面本地仓库还有一个feature-2的,可能我上面在nano那部分那里误操作了,这里就显示不出来了,体谅一下)
方法二:使用 git fetch
命令同步
git fetch --prune origin
或者简写:
git fetch -p
这个命令会在获取远程更新的同时,自动清理本地已失效的远程分支引用。
3、补充说明
-
本地分支与远程分支:需要注意的是,上述操作仅清除远程分支的本地引用(如
origin/feature-1
),不会删除本地创建的分支。如需删除本地分支,需使用git branch -d <branch-name>
命令。 -
自动化配置:可以设置 Git 在每次执行
fetch
时自动清理:git config --global fetch.prune true
通过以上方法,您可以保持本地仓库与远程仓库的分支状态同步,避免操作过时或已删除的分支。
注意:删除操作不可逆,请在执行前确认分支确实不再需要。
这样就清理了远程仓库中已不存在的本地分支。关于删除本地分支的操作,我们在之前的博客已经学习过,大家可以自行练习掌握。