
目前基本上可以完成的工作如下基本完成Git的所有本地库的相关操作git 基本操作分支理解版本回退冲突解决等等申请码云账号将远端信息clone到本地以及推送和力量去。但是还有一个特别重要的事情实现多人协作开发为了做这件事情我们需要先准备工作。一、准备阶段搭建多人协作环境1.1 开发者一将项目clone到指定目录在gitee上新建dev远程分支供我们使用 :创建成功创建成功的远程分支是可以通过Git 拉取到本地来 以完成本地开发工作 。Git 里的git push/git pull本质是本地 ↔ 远程仓库的同步操作。1. 如果本地分支和远程分支没有建立「追踪关系」Git 就不知道要把代码推到哪个远程仓库要推到哪个远程分支所以第一次推送时必须写全命令git push origin master2. 克隆仓库时会自动建立连接当你用git clone拉取一个仓库时本地会自动创建master或main分支这个本地分支会自动追踪远程仓库里同名的origin/master分支相当于 Git 已经记住了「本地 master ↔ 远程 origin/master」的对应关系3. 建立连接后push 可以简化写法1.2 开发者二在windows环境下在clone同一个项目仓库 来模拟多人开发的开发者按住Shift键同时在文件夹空白处右键单击。在弹出的菜单里你会看到在终端中打开Windows 11 推荐默认就是 PowerShell或者Open PowerShell window hereWindows 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.txtvim 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 gitgitee.com:hyb91/git_teaching.githint: Updates were rejected because the remote contains work that you dohint:not have locally. This is usually caused by another repository pushinghint: to the same ref.You may want to first integrate the remote changeshint: (e.g., git pull ...) before pushing again.意思是远程分支有新的提交而你没有拉取所以推送被拒绝。3.3 开发者B拉取并解决冲突按照提示先拉取最新代码git pull origin devGit会自动尝试合并但发现file.txt有冲突提示Auto-merging file.txtCONFLICT (content):Merge conflict in file.txtAutomatic merge failed; fix conflicts and then commit the result.此时打开file.txt你会看到Git用特殊标记标出了冲突hello git HEADbbbaaa 305f78a... first function你需要手动编辑这个文件决定保留哪些内容。例如我们保留两个功能hello gitaaabbb保存后告诉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 master4.3 切换至master分支合并dev分支git checkout master git merge dev cat file.txt4.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 最后删除分支