Git【多人协作一】

目前,基本上可以完成的工作如下:

  • 基本完成Git的所有本地库的相关操作,git 基本操作,分支理解,版本回退,冲突解决等等
  • 申请码云账号,将远端信息clone到本地,以及推送和力量去。

但是,还有一个特别重要的事情,实现多人协作开发!!!为了做这件事情,我们需要先准备工作。


一、准备阶段:搭建多人协作环境

1.1 开发者一

  • 将项目clone到指定目录:
  • gitee上新建dev远程分支 供我们使用 :
  • 创建成功
  • 创建成功的远程分支是可以通过Git 拉取到本地来 , 以完成本地开发工作 。

Git 里的 git push / git pull 本质是本地 ↔ 远程仓库的同步操作。

1. 如果本地分支和远程分支没有建立「追踪关系」,Git 就不知道:

  • 要把代码推到哪个远程仓库
  • 要推到哪个远程分支

所以第一次推送时,必须写全命令:git push origin master

2. 克隆仓库时会自动建立连接

当你用 git clone 拉取一个仓库时:

  • 本地会自动创建 master(或 main)分支
  • 这个本地分支会自动追踪 远程仓库里同名的 origin/master 分支
  • 相当于 Git 已经记住了「本地 master ↔ 远程 origin/master」的对应关系

3. 建立连接后,push 可以简化写法

1.2 开发者二

在windows环境下,在clone同一个项目仓库 , 来模拟多人开发的开发者

  • 按住 Shift 键,同时在文件夹空白处右键单击。
  • 在弹出的菜单里,你会看到:
    • 在终端中打开(Windows 11 推荐,默认就是 PowerShell)
    • 或者 Open PowerShell window here(Windows 10 经典选项)
  • 点击后,PowerShell 会直接打开,且当前路径就是 D:\git

二、创建远程开发分支

在实际开发中,我们通常不会直接在主分支master上干活,因为master应该始终保持稳定。正确的做法是:基于master创建一个dev分支,所有开发都在dev上进行。

2.1 在Gitee上创建dev分支

在远程仓库页面,点击"分支" -> "新建分支",分支名输入dev,基于master创建。【上面已经完成】

2.2 拉取远程dev分支到本地

开发者A和B都需要拉取这个新分支:

复制代码
git pull

此时运行git branch -r,应该能看到origin/dev

也可以直接clone下来 , 我们上面已经克隆了下来

2.3 创建本地dev分支并关联

在本地创建dev分支,并与远程dev分支关联:

复制代码
git checkout -b dev origin/dev

这条命令会:

  • 创建本地dev分支

  • 切换到dev分支

  • 设置本地dev分支跟踪远程origin/dev

三、模拟并行开发与冲突解决

假设你们要共同开发一个file.txt文件。开发者A先写了一个功能,并推送;**开发者B随后也修改同一个文件,推送时就会遇到冲突。**这是团队协作中最常见的情况,我们来一步步模拟。

3.1 开发者A:添加第一个功能并推送

dev分支上,编辑file.txt

复制代码
vim file.txt

内容如下:

复制代码
hello git
aaa

然后提交并推送:

复制代码
git add file.txt
git commit -m "first function"
git push origin dev

推送成功。此时远程dev分支已经包含了第一次提交。

3.2 开发者B:在未拉取的情况下修改文件

开发者B没有执行git pull,直接修改本地的file.txt(内容可能基于旧的版本):

复制代码
hello git
bbbb

然后提交并尝试推送:

复制代码
git add file.txt
git commit -m "second function"
git push origin dev

此时,Git会拒绝推送,并提示:

! [rejected] dev -> dev (fetch first)

error: failed to push some refs to 'git@gitee.com:hyb91/git_teaching.git'

hint: Updates were rejected because the remote contains work that you do

hint:not have locally. T his is usually caused by another repository pushing

hint: to the same ref.You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.

意思是:远程分支有新的提交,而你没有拉取,所以推送被拒绝。

3.3 开发者B:拉取并解决冲突

按照提示,先拉取最新代码:

复制代码
git pull origin dev

Git会自动尝试合并,但发现file.txt有冲突,提示:

Auto-merging file.txt

CONFLICT (content): Merge conflict in file.txt

Automatic merge failed; fix conflicts and then commit the result.

此时打开file.txt你会看到Git用特殊标记标出了冲突

hello git

<<<<<<< HEAD

bbb

=======

aaa

>>>>>>> 305f78a... first function

**你需要手动编辑这个文件,**决定保留哪些内容。例如,我们保留两个功能:

hello git

aaa

bbb

保存后,告诉Git冲突已解决:

这次推送成功。至此,两位开发者已经完成了第一次并行开发与冲突解决。
不断的 git pull/add/commit/push ,遇到了冲突,就使用我们之前讲的冲突处理解决掉冲突

四、将开发分支合并到主分支

dev分支上的功能开发完成,测试通过后,就需要将dev分支合并到master分支。这是项目上线前的关键步骤。

4.1 确保本地master是最新的

复制代码
git checkout master
git pull origin master

切换至master分支 , pull 一下,保证本地的 master是最新内容合并前这么做是一个好习惯~

4.2 却换dev分支,处理冲突

切换至dev分支,合并master分支 , 这么做是因为如果有冲突,可以在dev分支上进行处理,而不是在master上解决冲突 ~

复制代码
 git checkout dev
git merge master

4.3 切换至master分支,合并dev分支

复制代码
git checkout master
git merge dev
cat file.txt

4.4 将master分支推送至远端

复制代码
git status
git push origin master
git status

此时,查看远端仓库,master已经是最新代码了

此时,dev 分支对于我们来说就没用了, 那么 dev 分支就可以被删除掉**。我们可以直接在远程仓库中 将dev分支删除掉!**

总结一下,在同一分支进行多人协作的工作模式通常是这样:

  • 首先,可以试图用 git push origin branch-name推送自己的修改
  • 如果推送失败 , 则因为远程分支比你的本地更新更早,需要先用git pull 试图合并
  • 如果合并有冲突,解决冲突,并在本地提交
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 功能开发完毕,将分支merge进master , 最后删除分支
相关推荐
AlbertS3 小时前
记一次推送lfs失败不能迁移git仓库到新的gitlab的问题
git·ai·gitlab·lfs·rejected
Eternity_GQM4 小时前
【Git入门】
大数据·git·elasticsearch
kikikidult6 小时前
GitHub的使用(二)——一次完整 Git 上线流程记录
git·github
茉莉玫瑰花茶6 小时前
Redis 持久化
redis·git·github
KaneLogger16 小时前
OpenCode 操作手册
git
木子小喵16 小时前
通俗讲解Git安装每一步!!
git
IOT那些事儿17 小时前
TortoiseGit拉取开源子仓库失败
git·ssh·tortoisegit·submodule
不想看见40418 小时前
Git的多种仓库选择与推荐
git
脆皮炸鸡7551 天前
Linux开发工具~~~版本控制器Git以及调试工具GDB
linux·服务器·开发语言·经验分享·git·学习方法