84、git多分支、git远程仓库、ssh方式连接远程仓库、协同开发、冲突解决

177 阅读6分钟

git多分支

1.查看分支
  git branch      # 本地
  git branch -a   # 本地和远程
2.创建分支
	git branch dev

3.切换分支
	git checkout 分支名字

4 删除分支
	git branch -d 分支名

5 合并分支操作步骤
	1.创建dev分支,并切换
		git branch dev
    git checkout dev
  2.在dev分支上创建一个xx.txt,加入内容:touch xxx.txt
  3.对新增的内容提交
    git add .
    git commit -m 'dev分支增加了xx.txt'
  4.再修改存在的nana.txt文件内容,并提价
    修改lqz.txt  加入一样
    git add .
    git commit -m 'lqz.txt 加入内容'
    
	5.切回到主分支(增的东西,都没有)
  	git checkout main
    ps:新增的文件,看不到
  6.把dev合并到master上,要在master身上
    git merge dev
		ps:主分支和dev分支就一样了
ps:mac常用终端命令:https://www.jianshu.com/p/78fbaf22c357

分支.png

git远程仓库

1.我们要协同开发,代码要提交到远程仓库,可以使用gitee,github,gitlab,本文以gitee为例
2.基本使用
	1.注册账号
	2.在账号中,新建一个仓库 [本地仓库,推送到远程仓库]
	3.如图所示  ---->[如果创建远程仓库不是空的,就会有问题]
	4.本地仓库,推到远端(gitee自动)
		1.本地已经有了
        """
          git remote 查看有哪些远程仓库
          git remote remove origin   # 删除本地跟远程仓库的链接关系
          
        """
      
        """
        gitee里面的提示的:
        cd existing_git_repo
        git remote add origin https://gitee.com/luona-cx/nana.git
        git push -u origin "main"
        """
        git remote add 远程仓库名字  远程仓库地址
    		git push origin master  # 把本地仓库中所有的内容,提交到远程仓库
    	
		2.弹出框,要求输入用户名和密码(之前输入过,保存了)
		3.本地仓库代码就会被推送到远端了

ps:git push -u origin master 中-u的意思是,只要执行一遍这个命令,以后执行git push 就等同于git push origin maste,所有-u表示设置一个默认

创建仓库.png

remote源操作

1.查看仓库已配置的远程源
  git remote
  git remote -v

2.查看remote命令帮助文档
	git remote -h

3.删除远程源
  git remote remove 源名
  eg: git remote remove origin

4.添加远程源
  git remote add 源名 源地址
  git remote add orgin https://gitee.com/liuqingzheng/app01.git

5.提交代码到远程源
	git push 源码 分支名

6.克隆远程源
	git clone 远程源地址

ps:
	1.通过克隆方式连接远程源,默认远程源名就叫origin;所以主动添加远程源来连接远程仓库,源码也用origin
	2.本地一个仓库只需要和远程一个源进行同步,所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,那么可以通过主动添加远程源来连接第三个平台的远程仓库,此时的源码就不能再叫origin了,比如online都可以
	3.pull和push都可以提供选择不同的源码,和不同的远程仓库交互

ssh方式链接远程仓库

简介

1.远程仓库推送,走的都是https的协议,需要用户名密码

2.加密算法:对称加密、非对称加密
	对称:AES,DES-->是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。
  非对称:-->又称公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中。
  
3.公司里,常用ssh协议方式推送代码
	特点:
  	1.它不需要用户名密码,而需要:公钥私钥【非对称加密】
    2.在本地机器生成公钥【可以给任何人】和私钥【自己留着】
		ps:git@gitee.com:luona-cx/nana.git
      

具体操作

1.先删除原来使用https链接的remote
	git remote remove origin
2.增加一个跟远程仓库的链接 origin --->是ssh协议的
	git remote add origin git@gitee.com:liuqingzheng/lqz.git
3.本地机器,生成公钥私钥[使用命令生成]
文档:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE
	1.打开cmd 执行 ,一路回车
		ssh-keygen -t ed25519 -C "863942169@qq.com"
	2.用户根路径,生成 .ssh文件夹,里面有公钥和私钥
  """
  ssh-keygen -t ed25519 -C "863942169@qq.com"
  ls ~/.ssh/
  cat ~/.ssh/id_ed25519.pub
  """
4.设置公钥:用户可以通过主页右上角 「个人设置」->「安全设置」->「SSH 公钥」->「添加公钥」,添加生成的 public key 添加到当前账户中。-->可以配多个
	https://gitee.com/profile/sshkeys
5.以后放心大胆的
	git push origin main # 提交代码即可

实际

1.用gitlab,可能你自己注册账号,也可能别人直接给你注册号了,你直接登录,修改密码即可
2.登录gitlab能看到代码仓库,仓库的所有者[你们领导],会把你加成这个仓库的【开发者】
3.基于这个仓库继续开发,提交代码
4.ssh方案:本地生成公钥私钥【本地有了,就不用重新生成了】
5.把公钥,配置在自己的gitlab账号里面
6.以后就免密对仓库有操作权限了

协同开发

1.仓库管理员[领导],创建仓库,邀请成员,成为开发者
2.被邀请的人,登录自己账号,就能看到仓库了
	

4.1 多人协同开发

1.从远端克隆代码
	git clone ssh地址
2.进到文件夹中,改东西
3.git add .
4.git commit -m '改了一行'
5.git pull origin master  # 拉去仓库中最新的代码   否则提交不了
6.git push origin master

ps:多人操作统一仓库,就是协同开发,但是咱们这个操作,没有遇到冲突

冲突解决

1.出现冲突的原因
	1.多人在同一分支,修改了同一个地方的代码,出现的冲突
	2.分支合并时出冲突
    
2.多人统一分支开发,修改了同样的代码
	eg:
		某人修改了1.txt的第四行,提交了
    我操作:
    	修改了1.txt第四行
        -git add .
        -git commit -m ' 注释'
        -git pull origin master
        -出冲突了
            <<<<<<< HEAD
            我的代码
            =======
            别人的代码
            >>>>>>> af38b6ae4d9e126bd88b9b039e475e8ddbc23510
            
3.处理冲突
   1.选择要保留的代码,要么删自己的,要么删别人的,要么都留着
   2.重复操作
    	git add .
      git commot -m '解决冲突' 
      git push origin master
    
ps:大原则,多人同一分支开发,如果尽量避免冲突,要不停的拉去代码
 

分支合并出冲突

背景:主分修改某一文件的内容(在1.txt最后一行加123),dev分支在这个文件相同位置加入了内容,会出现分支合并出冲突
1.新建dev分支,切换,增加代码,提交
 	git branch dev
	git checkout dev
	在1.txt最后一行增加 123
	git add 
	git commit -m '注释'
2.切换回主分支操作
	git checkout master
3.在主分支增加内容,提交
	在1.txt最后一行增加 123456
	git add 
	git commit -m '注释'
4.合并分支 -出冲突了       
  <<<<<<< master
  我的代码
  =======
  别人的代码
  >>>>>>> dev
5.解决冲突,提交
	git add
	git cmommit