Git使用--多人协作

news2024/11/23 21:51:21

多人协作

    • 多⼈协作
      • git branch -r
      • git checkout -b dev origin/dev
    • 远程分⽀删除后,本地git branch -a依然能看到的解决办法
      • git remote show origin
      • git remote prune origin

多⼈协作

截止到目前,我们学习了如下Git的相关知识:

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

是时候⼲最重要的⼀件事情了,实现多⼈协作开发!为了做这件事情,我们需要先做⼀些准备⼯作。

linux上,我们之前已经将项⽬clone到了指定⽬录,如下:

[root@VM-16-15-centos git_study]# pwd
/root/git_study

我们在windows环境下,再clone同⼀个项⽬仓库,来模拟和你⼀起协作开发的另⼀名⼩伙伴:
在这里插入图片描述

注意,我这里用的是ssh协议进行clone的,它需要你将你windows上的公钥设置到远程,关于怎么设置我在Git远程操作中有讲解。

我们看到目前远程仓库有一个file.txt文件的,我们的目标是在远程master分支下file.txt文件中新增代码“aaa”、“bbb”。

  • 实现:由开发者1(Linux下)新增"aaa",开发者2(windows)新增"bbb"
  • 条件:在一个分支下完成。

⽬前,我们的仓库中只有⼀个master主分⽀,但在实际的项⽬开发中,在任何情况下其实都是不允许直接在master分⽀上修改代码的,这是为了保证主分⽀的稳定。所以在开发新功能时,常常会新建其他分⽀,供开发时进⾏迭代使⽤。
在这里插入图片描述

那么接下来,就让我们在gitee上新建dev远程分⽀供我们使⽤:

在这里插入图片描述
创建成功的远程分⽀是可以通过Git拉取到本地来,以实现完成本地开发⼯作。

git branch -r

接下来让我们将远程仓库进⾏⼀次拉取操作,并观察结果:

[root@VM-16-15-centos git_study]# git pull
From gitee.com:ZMZZZhao/git_study
 * [new branch]      dev        -> origin/dev
Already up-to-date.
# 注:之前讲的 git branch 其实只能查看本地分⽀,要查看远程分⽀需要加上-r选项。
# 但前提是要pull⼀下拉取最新的远端仓库,才能看到最新的内容
[root@VM-16-15-centos git_study]# git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master

此时通过git branch -r我们可以在本地看到远程的分支情况。


另外,通过git branch -a可以查看本地和远程的分支情况:

[root@VM-16-15-centos git_study]# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master

我们本地当前并没有dev分支,接下来我们需要在本地创建dev分支,并且和远端的dev分支关联起来。

这个时候往往会用git checkout -b dev origin/dev这个命令

git checkout -b dev origin/dev

它意思是说,创建并切换到dev分支上(git checkout -b dev),接着跟远程的origin地址上的dev分支关联起来。

[root@VM-16-15-centos git_study]# git checkout -b dev origin/dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'

这里要注意origin代表是一个路径,可以用git remote -v 查看; 说白了,origin/dev有点像是git@gitee.com:ZMZZZhao/git_study.git/dev

origin	git@gitee.com:ZMZZZhao/git_study.git (fetch)
origin	git@gitee.com:ZMZZZhao/git_study.git (push) ```

对于⼩伙伴(Windows)要操作的是:

在这里插入图片描述

现在,你和你的⼩伙伴就可以在 dev 上完成开发。

⾸先,让我们在 dev 分⽀上进⾏⼀次开发,并 push 到远程。例如:

[root@VM-16-15-centos git_study]# vim file.txt 
[root@VM-16-15-centos git_study]# cat file.txt 
hello world!

第一次修改内容

aaa
[root@VM-16-15-centos git_study]# git add file.txt
[root@VM-16-15-centos git_study]# git commit -m "add aaa"
[dev afac038] add aaa
 1 file changed, 3 insertions(+), 1 deletion(-)
[root@VM-16-15-centos git_study]# git push origin dev # 将dev分⽀推送到远端
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:ZMZZZhao/git_study.git
   11842c3..afac038  dev -> dev

让我们来看看码云上⽬前仓库的状态:

在这里插入图片描述

⾄此,我们已经将代码成功推送⾄码云,接下来假如你的⼩伙伴要和你协同开发,碰巧也要对file.txt⽂件作修改,并试图推送,例如:

在这里插入图片描述

这时推送失败,因为你的⼩伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git已经提⽰我们,先⽤ git pull 把最新的提交从 origin/dev 抓下来,然后,在本地进⾏合并,并解决冲突,再推送。操作如下:

在这里插入图片描述

此时,我们看到远端的码云已经能看到我们的新提交了!

在这里插入图片描述

由此,两名开发者已经开始可以进⾏协同开发了,不断的 git pull/add/commit/push ,遇到了冲突,就使⽤我们之前讲的冲突处理解决掉冲突。

对于你来说,要想看到⼩伙伴的代码,只需要 pull ⼀下即可.

最后不要忘记,虽然我们是在分⽀上进⾏多⼈协作开发,但最终的⽬的是要将开发后的代码合并到master上去,让我们的项⽬运⾏最新的代码。接下来我们就需要做这件事情了:

# 切换⾄ master分⽀, pull ⼀下,保证本地的master是最新内容。
# 合并前这么做是⼀个好习惯
泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git pull
Already up to date.
# 切换⾄ dev 分⽀, 合并 master 分⽀
# 这么做是因为如果有冲突,可以在dev分⽀上进⾏处理,⽽不是在在master上解决冲突。
# 这么做是⼀个好习惯
泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git checkout dev
Switched to branch 'dev'
Your branch is up to date with 'origin/dev'.

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (dev)
$ git merge master
Already up to date.
# 切换⾄ master 分⽀,合并 dev 分⽀
泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git merge dev
Updating 11842c3..843e0ee
Fast-forward
 file.txt | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ cat file.txt
hello world!

第一次修改内容

aaa
bbb
# 将 master 分⽀推送⾄远端
泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:ZMZZZhao/git_study.git
   11842c3..843e0ee  master -> master

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

在这里插入图片描述

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

在这里插入图片描述


总结⼀下,在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:

  • ⾸先,可以试图⽤git push origin branch-name推送⾃⼰的修改;
  • 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤git pull试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
  • 功能开发完毕,将分⽀merge进master,最后删除分⽀。

那么多人协作还有其他一下场景,我们就不一一说了,大家在实际运用中自己体会。

远程分⽀删除后,本地git branch -a依然能看到的解决办法

当前我们已经删除了远程的dev分⽀,使⽤ git branch -a 命令可以查看所有本地分⽀和远程分⽀,但发现在远程仓库已经删除的分⽀在本地依然可以看到。例如:
在这里插入图片描述

git remote show origin

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

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git remote show origin
* remote origin
  Fetch URL: git@gitee.com:ZMZZZhao/git_study.git
  Push  URL: git@gitee.com:ZMZZZhao/git_study.git
  HEAD branch: master
  Remote branches:
    master                  tracked
    refs/remotes/origin/dev stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    dev    merges with remote dev
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

git remote prune origin

此时我们可以看到远程仓库已经不存在的分⽀(dev),根据提⽰,使⽤ git remote prune origin 命令:

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git remote prune origin
Pruning origin
URL: git@gitee.com:ZMZZZhao/git_study.git
 * [pruned] origin/dev

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git branch -a
  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

这样就删除了那些远程仓库不存在的分⽀。

接着,把本地仓库dev分支删除即可。

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git branch
  dev
* master

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git branch -d dev
Deleted branch dev (was 843e0ee).

泠渊@LAPTOP-TOS5MMUL MINGW64 /d/git_test/git_study (master)
$ git branch
* master

the end!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wireshark抓包验证TCP协议的三次握手与四次挥手

TCP的基本知识与Wireshark TCP的一些先知知识可以看下面的文章,了解TCP协议的基本原理,与报文的首部格式。 https://blog.csdn.net/weixin_52308622/article/details/131141490?spm1001.2014.3001.5501 https://blog.csdn.net/weixin_52308622/artic…

30天自制操作系统 day2 换种方式制作磁盘镜像 makefile

制作磁盘镜像工具 用的是它自己写的工具,叫edimg。使用方式如下 edimg imgin:../z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img读取fdimg0at.tek,在读取ipl.bin,从ipl.bin的开头读512个字节到fdim…

《TCP IP网络编程》第八章

第 8 章 域名及网络地址 DNS 是对IP地址和域名进行相互转换的系统,其核心是 DNS 服务器。域名就是我们常常在地址栏里面输入的地址,将比较难记忆的IP地址变成人类容易理解的信息。 计算机内置的默认DNS服务器并不知道网络上所有域名的IP地址信息。若该DN…

第 355 场 LeetCode 周赛

A 按分隔符拆分字符串 简单模拟 class Solution { public:vector<string> splitWordsBySeparator(vector<string> &words, char separator) {vector<string> res;for (auto &s: words) {int n s.size();for (int i 0, j 0; i < n;) {while (j …

C++——String类的增删查改

目录 前言 1.String类的增删查改 1.1增 实验代码&#xff1a; 运行结果&#xff1a; 实验代码&#xff1a; 运行结果:​编辑 1.2删 实验代码&#xff1a; 结果: 1.3查找 练习&#xff1a;查找文件后缀 运行结果&#xff1a; 1.4 改 前言 上篇博客中&#xff0c;我介绍了St…

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目&#xff08;VSIX&#xff09;3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

【团队协作开发】IDEA中Git新建自己的dev工作分支,合并到master主分支教程(极其简单,新手)

文章目录 一、创建新dev工作分支二、push到自己的远程dev工作分支三、工作分支合并到master主分支1、先切换到master主分支2、将远程工作dev分支的内容merge到当前master分支中3、将merge提交到远程master分支 一、创建新dev工作分支 创建完新dev分支以后将默认切换到新dev分支…

K8S 证书过期后,kubeadm 重新生成证书

前言 K8S 各个组件需要与 api-server 进行通信&#xff0c;通信使用的证书都存放在 /etc/kubernetes/pki 路径下&#xff0c;kubeadm 生成的证书默认有效为 1 年&#xff0c;因此需要定时更新证书&#xff0c;否则证书到期会导致整个集群不可用。 本篇文章主要介绍如何通过 k…

openGauss学习笔记-17 openGauss 简单数据管理-表达式

文章目录 openGauss学习笔记-17 openGauss 简单数据管理-表达式17.1 简单表达式17.2 条件表达式17.3 子查询表达式17.4 数组表达式17.5 行表达式 openGauss学习笔记-17 openGauss 简单数据管理-表达式 表达式类似一个公式&#xff0c;我们可以将其应用在查询语句中&#xff0c…

SpringMVC注解介绍(二)

目录 1.RequestPart上传文件 2.获取Cookie 1.使用CookieValue 3.获取Session 3.1SessionAttribute 4.设置Session 4.1HttpSession设置Session 5.获取Header 5.1RequestHeader 6.返回数据 1.返回Json对象 7.请求转发或请求重定向 7.1forward和redirect区别 7.2请求…

element的el-upload实现多个图片上传以及预览与删除

<el-form-itemlabel"实验室照片:"prop"labUrlList"v-if"ruleForm.labHave"><el-upload:action"urlUpload":headers"loadHeader"list-type"picture-card":file-list"ruleForm.labUrlList"class…

LabVIEW在IMAQ图像中手动选择多个ROI

LabVIEW在IMAQ图像中手动选择多个ROI 设计了一个VI&#xff0c;用于在图像上生成和叠加一系列感兴趣区域&#xff08;ROI&#xff09;&#xff0c;并在IMAQ图像控件中显示它们。想挑选其中的一些进行后续处理。可以在控件中手动选择 ROI 吗&#xff1f; 以编程方式生成的 ROI…

MYSQL练习二答案

练习2答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、修改emp表中sal字段为salary SQL语句 ALTER TABLE emp change sal salary double结果&#xff1a; 2、查找年薪在20000到30000之间的所有员工信息并按照 工…

Vue中scoped样式

scoped样式&#xff1a; 作用&#xff1a;让样式在局部生效&#xff0c;防止冲突 写法&#xff1a;<style scoped> 目录结构: Student.vue: 中的背景颜色设置的orange橙色 <template><div class"demo"><h2>学生姓名&#xff1a;{{name}}<…

文本预处理——文本张量表示方法

目录 文本张量表示one-hot编码word2vecword embedding 文本张量表示 one-hot编码 word2vec word embedding

四,Eureka 第四章

2.1.3 增加依赖 <!--添加依赖--><dependencies><!--Eureka Server--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>&l…

uniapp app nfc读取IC卡数据

先勾选权限 判断当前设备是否支持NFC以及是否打开了NFC功能 var main plus.android.runtimeMainActivity(); var NfcAdapter plus.android.importClass("android.nfc.NfcAdapter"); var _nfcAdapter NfcAdapter.getDefaultAdapter(main); console.log(NFC,_nfcA…

43:Three.js - 中

一、相机 相机&#xff0c;类似于眼睛&#xff0c;用于在3D舞台中&#xff0c;放置在不同的位置&#xff0c;实现通过不同的角度观察物体。 查看 Three.js 的文档&#xff0c;可以看到 Camera 是一个抽象类&#xff0c;一般不直接使用&#xff0c;其他类型的 Camera 实现了这个…

循环链表的实现

循环链表简介 简单来说&#xff0c;单链表像一个小巷&#xff0c;无论怎么样最终都能从一端走到另一端&#xff0c;循环链表则像一个有传送门的小巷&#xff0c;因为循环链表当你以为你走到结尾的时候&#xff0c;其实你又回到了开头。循环链表和非循环链表其实创建的过程以及…

RS485自由转PROFINET网关连接扫码枪

捷米JM-RS485/232-PN(RS485转Profinet)将具有RS485/232接口、自由通信协议接口的设备与PROFINET相连&#xff0c;作为PROFINET现场总线系统的一个设备。 捷米JM-RS485/232-PN集成了一个2端口交换机。受支持的以太网服务&#xff1a;ping、arp、SNMP和LLDP。端口诊断。禁用端口…