多分支Git的操作简介,冲突合并,多平台对应

多分支Git的操作简介

在使用git管理代码时,在多人开发,或者不同功能开发以及环境测试时,需要保持master代码的稳定性,因此往往需要创建多分支的Git仓库,这里记录一些多分支仓库的操作指令

1. 分支操作

1.1 创建分支
git branch 分支名

上述输入想要创建的分支名字,即可在本地创建分支,如

git branch develop

即可以在本地创建名为develop的分支

1.2 查看分支
git branch     #查看本地分支
git branch -a    #查看所有分支,本地分支和远程分支

所有分支的返回值

1.3 切换分支
git checkout 分支名

查看分支对应关系和当前分支

git status

在这里插入图片描述
在这里插入图片描述

2. Push与Pull指令

正常情况下,只要按照上一步所示的,当前本地分支与远程对应分支一致的时候,可以直接采用pull或者push
但是有些时候,老版本的git无法自动连接本地分支和远程分支,需要采用一下的操作方式:

2.1 操作方式一

采用带有指令的push和pull

git pull origin master:master
#第一个master为远程的master分支,第二个为本地,总体为from xxx to xxx的语法格式

↑该操作会将远程的master分支,同步到本地master分支。

git push origin master:master
#第一个master为本地分支,第二个为远程分支,origin为远程的主机名

↑该操作会将本地master分支推送到远程master分支
上述操作可以简单记为:

git push/pull <远程主机名> <from xxxbranch>:<destiny branch>

注意,git push或者git pull 所执行的都是获取比较(fetch)和合并(merge)操作,即本地和远程虽然都是master分支,但是本地的和远程仓库的可以看成两个不同的分支,通过git branch -a命令也可以看出来,本地和远程分支都会列举出来,因此每次的push或者pull都是本地推送到远程(push)或者远程推送到本地(pull)并合并的过程。

2.2 操作方式二

将本地分支链接的远程分支,如果git status中出现的不想上述的本地和远程已经链接好了,这个时候push和pull会出问题,采用上述的方式一可以暂时解决,但是也可以链接一下采用

git branch --set-upstream-to=/origin/develop develop 

通过该指令可以看出,将本地develop(上述命令的最后一个参数),和远程origin/develop建立起来上传和下发关联,之后操作git status就可以看到已经关联,而且采用push和pull可以直接不带参数,因为此时默认参数就是我们想要推送的位置。

3. 合并分支以及冲突处理

3.1 分支合并

develop分支合并到master分支
1.首先切换到分支;

git checkout develop

2.使用git pull 把分支代码pull下来;

git pull

3.切换到主分支;

git checkout master

4.把分支的代码merge到主分支;

git merge develop

5.git push推上去ok完成,现在 你自己分支的代码就合并到主分支上了。

git push

同样,主分支的文件也可以合并的分支上。

master分支代码合并到自己的分支
master分支的代码领先自己的分支,git 如何把master分支代码合并到自己的分支
1.首先切换到主分支

git checkout master

2.使用git pull 把领先的主分支代码pull下来

git pull

3.切换到自己的分支

git checkout xxx(自己的分支)

4.把主分支的代码merge到自己的分支

git merge master

5.git push推上去ok完成,现在 你自己分支的代码就和主分支的代码一样了

git push origin 自己分支名

注意:一定时到某个分支,然后merge (另一个分支名字),最后将另一个分支合并到本分支

3.2 冲突解决

首先创建一个两分支模型,在云端创建两分支之后,制造一个冲突
在这里插入图片描述

创建一个文件test.txt内容如下,并上传到远程develop分支

在这里插入图片描述在这里插入图片描述
将刚才创造上传到develop分支的文件合并到master分支则有
合并到master之前
在这里插入图片描述在这里插入图片描述

在develop分支和master分支分别修改该文件并上传到对应的远程主机
develop中的test.txt文件:
在这里插入图片描述master中的test.txt文件
在这里插入图片描述

3.2.1 采用git指令合并的操作

切换到master并将develop合并(–no-ff合并)的master则有
在这里插入图片描述

打开test.txt文件则有

在这里插入图片描述

接下来需要手动操作保留哪一项文件内容,然后删除上面的HEAD,中间等号,和后面的develop部分。这里我们选择 都保留 则有

在这里插入图片描述
回到git指令行中进行add 然后commit,然后push,如下图所示
在这里插入图片描述

切换会develop分支发现文件还是develop分支的原文件,因为刚才是对master分支进行操作的,如下图所示
在这里插入图片描述

此时我们可以将master分支合并到develop,则可以同步两个分支的文件
在这里插入图片描述

3.2.2 采用Pull-Request合并冲突时的办法

首先还是分别在两个分支修改test.txt文件
master分支修改为并push
在这里插入图片描述develop分支修改为并push
在这里插入图片描述来到网页上的远程主机,创建PR
在这里插入图片描述

回到git,在develop分支中merge master分支,这样的好处在于,由上文所知,虽然在网页上是要将develop 合并到master,但是master分支一般很重要,因此这种冲突的处理建议在develop分支进行,因此,此处与上文略作区别,将master合并到develop,冲突处理完之后,是develop分支发生了改变,develop会领先master,然后再合并。
在这里插入图片描述
按照之前一样,处理文件中的冲突
在这里插入图片描述
然后上传到develop
在这里插入图片描述

回到远程主机,刷新一下,变为可自动合并,注意此时develop是先于master的
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

然后检查两个分支的文件,注意master需要拉取(pull)一下
在这里插入图片描述

3.2.3 合并过程的问题探究

那如果按照上述操作(即将master采用指令合并到develop)的话,develop中有新的内容会被master覆盖嘛?
创建新文件并修改,然后push
在这里插入图片描述在这里插入图片描述

修改master分支下的test.txt文件,并push
在这里插入图片描述
在这里插入图片描述

然后来到远程主机,创建PR可以发现如上文所示,无法自动合并
在这里插入图片描述

为了保证master的安全,我们将,master合并到develop,然后来处理冲突
在这里插入图片描述

此时的develop分支为
在这里插入图片描述

可以发现new.txt还在,将master合并到develop的时候并不会完全覆盖develop的内容,因为develop是一个分支,合并不是覆盖,是比较并合并。
和前文一样,在develop下处理冲突

4. 一台电脑对应多个git平台的处理方式

当一个机子对应多个git平台时,需要进行如下操作:
~/.ssh文件夹下面存在多个sshkey,可以看到最初的是红框的部分
在这里插入图片描述

我这个部分中使用的是gitee的sshkey,因此使用github时需要新生成一个sshkey,采用指令:

ssh-keygen -t rsa -C "youremail@xxx.com"

后面的邮箱部分是一个标识符号,输入之后会出现一个路径选择,在路径选择中输入:

/home/jiahua/.ssh/id_rsa_github

然后不设置ssh的密码(两次回车)即可生成下面的第二部分
在这里插入图片描述
然后cat 获取.pub文件中的内容
粘贴到github平台的公钥中
由于是多个平台,需要准备一个名字为config的文件,即采用指令touch config
文件中的内容如下

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github

这样一来,使用ssh -T git@github.com 即可以成功链接平台
在上传代码时,由于之前使用过

git config --global user.name yourname  # "你的名字或昵称"
git config --global user.email youremail@xxx.com # "你的邮箱"

如果github和gitee的config一致可以不用在操作,若是不一致,可以在这个.git仓库下采用

git config  user.name yourname  # "你的名字或昵称"
git config user.email youremail@xxx.com # "你的邮箱"

即可完成在该仓库下的认证。

5. 一个代码仓库上传到不同平台的操作

先按照上文添加远程仓库ssh密钥
然后采用指令

git remote add origin-github https://the_address.git

上面的origin-github可以自己给定远程仓库别名,便于记忆即可
推送到远程仓库

git push/pull origin-github master:master

跟上文一样from xxx to xxx

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值