Git分支的多人协作
Git分支多人协作
- 单一分支的多人协作
- 分支推送与拉取
- 分支推送协作
- 分支拉取协作
- 远程分支的删除
单一分支的多人协作
创建testGit1本地与远程仓库
修改本地仓库local的级别的用户名和邮箱
$ git config --local user.name ‘鲁智深’
$ git config --local user.mail ‘luzhishen@126.com’
项目克隆
把远程项目克隆到本地形成一个本地仓库:git clone 远程仓库HTTP
此时克隆下来的仓库和远程仓库的名字一致
也可以克隆远程项目自己定义仓库名字:git clone 远程仓库HTTP testGit2
指定本地仓库级别的用户名和邮箱
git config --local user.name ‘林冲’
git config --local user.email ‘linchong@txjava.com’
下面演示单一分支的协作处理
在testGit1中通过鲁智深添加文件b.txt并推送到远程 git push origin master
此时林冲需要从远程仓库重新拉取 git pull origin master
这是一次多人协作,但事实情况更为复杂,例如当两个人修改同一个文件的时候会发生冲突,下面进行冲突演示
我们使用鲁智深修改b.txt内容后,提交并且推送到远程
此刻林冲也修改B.txt内容,提交并且推送远程的时候发现出现冲突,推送失败,产生冲突
首先需要拉取代码,拉取成功但是自动合并失败,我们需要修改冲突,修改完成后再提交,并推送至远程仓库
分支推送与拉取
分支推送协作
创建dev分支
git push无法把dev分支推送到远程
将本地分支推送到远程仓库并建立本地分支与远程分支的关联关系
git push --set-upstream origin dev
远程分支已经推送
除此之外我们可以使用下面命令完成远程分支推送 git push -u origin dev2
其中 -u 是 --set-upstream 的缩写
远程分支已经推送
将本地分支的代码推送到远程仓库时不仅会在远程创建分支并且 Git 也会自动在 .git/config 中添加配置绑定本地分支与远程分支之间的跟踪关系,如下
分支拉取协作
首先我们需要明确 git fetch
和 git pull
都是用于获取远程仓库更新的命令,核心区别在于是否自动将远程更新合并到本地当前分支
- git fetch:只获取不合并,仅将远程仓库的最新状态同步到本地的远程跟踪分支(如 origin/master、origin/dev,这些是本地缓存的远程分支镜像),但不会自动合并到当前工作的本地分支。执行后,本地工作分支的代码不会被修改,你可以先查看远程更新与本地的差异,再手动决定是否合并。
- git pull:获取且自动合并,本质是先执行 git fetch(拉取远程更新到对应的远程跟踪分支,如 origin/xxx),随后自动将该远程跟踪分支的更新合并到当前本地分支(例如,当前在 master 分支时,会自动合并 origin/master 到本地 master)。执行后,本地当前分支的代码会直接包含远程更新(若有冲突则需手动解决)。
我们使用林冲的仓库与账户进行拉取操作
若执行 git pull origin master,即从远程仓库origin的master分支拉取最新代码,并自动合并到当前所在的master本地分支中,如下
若执行 git pull,即Git将远程仓库的新分支(dev和dev2)抓取到了本地的远程跟踪分支中(即origin/dev和origin/dev2,这些是本地缓存的远程分支镜像),但随后试图将远程分支合并到当前本地分支时,由于当前所在分支没有与远程仓库的任何分支建立跟踪关联,不知道该合并哪个远程分支,合并失败最终只保留了抓取的结果
需要先通过 git fetch 或 git pull 将远程仓库的新分支抓取到本地,生成对应的远程跟踪分支,再执行 git checkout -b dev origin/dev,即基于远程跟踪分支创建本地的dev分支并切换到此本地分支,其中 origin/dev 指定新分支的基础来源,即本地缓存的远程跟踪分支(远程dev分支镜像)
还可以使用另一种方式,同样需要先通过 git fetch 或 git pull 将远程仓库的新分支抓取到本地,生成对应的远程跟踪分支,再执行该语句 git checkout --track origin/dev2
自动创建一个与远程 dev2 分支同名的本地分支,并让这个本地分支自动跟踪远程跟踪分支 origin/dev2,最后切换到这个新创建的本地 dev2 分支
基于远程跟踪分支创建本地分支时,Git 会自动绑定本地 dev 分支与远程 origin/dev 分支的跟踪关系,在 .git/config 中生成对应的跟踪关系配置
远程分支的删除
在鲁智深账户的本地仓库中删除dev2分支 git branch -d dev2
Git 会同时清理掉 .git/config 中与 dev2 分支相关的配置包括跟踪关系,但远程仓库上的分支还存在
删除远程仓库的 dev2 分支 git push origin --delete dev2
通过另一个用户来查看本地对应的远程分支
我们看到该本地仓库的远程跟踪分支 origin/dev2 尚未与远程仓库的最新状态同步
git remote show origin 查看远程仓库 origin 详细信息,发现远程仓库的 dev 分支被删除后,本地的远程跟踪分支 origin/dev2 不会自动消失
git remote prune origin 会检查远程 origin 的当前分支状态,然后删除本地所有远程已不存在的跟踪分支,确保本地的远程跟踪信息与远程仓库保持一致,仅清理不更新其他跟踪分支的内容
本地仓库再删除dev2分支