Git高级

一、git 多分支

# 分支操作
0 查看分支
git branch      # 本地
git branch -a   # 本地和远程
1 创建分支
git branch dev

3 切换分支
git checkout 分支名字

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

5 合并分支 操作步骤
	git branch dev
    git checkout dev
    新增一个文件 xx.txt,加入一行
    git add .
    git commit -m 'dev分支增加了xx.txt'
    修改lqz.txt  加入一样
    git add .
    git commit -m 'lqz.txt 加入内容'
    
    git checkout master
    # 切回到主分支(增的东西,都没有)
    	# 新增的文件,看不到
   	# 把dev合并到master上,要在master身上
    git merge dev

  # 主分支和dev分支就一样了

二、git远程仓库

我们要协同开发,代码要提交到远程仓库,可以使用gitee,github,gitlab,本文以gitee为例

2.1 gitee远程仓库

#1 以gitee为例,注册账号

#2 在账号中,新建一个仓库 [本地仓库,推送到远程仓库]
#3 如图所示  ----> [如果创建远程仓库不是空的,就会有问题]
#4 本地仓库,推到远端
	-本地已经有了
    # git remote 查看有哪些远程仓库
    # git remote remove origin   # 删除本地跟远程仓库的链接关系
    cd lqz
    # git remote add 远程仓库名字  远程仓库地址
	git remote add origin https://gitee.com/liuqingzheng/lqz.git
	git push origin master  # 把本地仓库中所有的内容,提交到远程仓库
    # 弹出框,要求输入用户名和密码(保存在Windows的凭据管理中)
    
    # 本地仓库代码就会被推送到远端了

    
# gitlab的两次链接命令
git remote add gitlab_origin http://192.168.1.252/zjy/my-project.git
git remote add gitlab_origin ssh://git@192.168.1.252:9922/zjy/my-project.git

2.2 gitlab远程仓库

三、ssh方式链接远程仓库

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

# 加密方式
	-对称:AES,DES
   	-非对称:
# 公司里,常用ssh协议方式推送代码
	-git@gitee.com:liuqingzheng/lqz.git
    -它不需要用户名密码,而需要:公钥私钥【非对称加密】
    -在本地机器生成公钥[可以给任何人]和私钥[自己留着]
    
    
# 具体操作
	-1 先删除原来使用https链接的remote
    -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
    	-打开cmd 执行 ,一路回车
        	ssh-keygen -t ed25519 -C "306334678@qq.com"
        - 用户家路径,生成 .ssh文件夹,里面有公钥和私钥
			- 私钥文件 id_ed25519
			- 公钥文件 id_ed25519.pub
   - 4 把公钥配置在gitee上【打开公钥】--> 可以配多个
		-https://gitee.com/profile/sshkeys
    
    -5 以后放心大胆的
    	git push origin master # 提交代码即可
    
    
# 你在公司中
	-1 用gitlab,可能你自己注册账号,也可能别人直接给你注册号了,你直接登录,修改密码即可
    -2 登录gitlab能看到代码仓库,仓库的所有者[你们领导],会把你加成这个仓库的【开发者】
    -3 基于这个仓库继续开发,提交代码
    -4 ssh方案:本地生成公钥私钥【本地有了,就不用重新生成了】
    -5 把公钥,配置在自己的gitlab账号里面
    -6 以后就免密对仓库有操作权限了
    

四、协同开发

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

4.1 多人协同开发

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


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

五、冲突解决

# 出现冲突的原因
	-1 多人在同一分支,修改了同一个地方的代码,出现的冲突
    -2 分支合并时出冲突

5.1 多人统一分支开发,修改了同样的代码

	-某人修改了1.txt的第四行,提交了
    -我操作:
    	-修改了1.txt第四行
        -git add .
        -git commit -m ' 注释'
        -git pull origin master
        -出冲突了
            <<<<<<< HEAD
            我的代码
            =======
            别人的代码
            >>>>>>> af38b6ae4d9e126bd88b9b039e475e8ddbc23510
	   -处理冲突
    		-选择要保留的代码,要么删自己的,要么删别人的,要么都留着
       -重复操作
    	git add .
        git commot -m '解决冲突' 
        git push origin master
    

# 大原则,多人同一分支开发,如果尽量避免冲突,要不停的拉去代码

5.2 分支合并出冲突

	  # 新建dev分支,切换,增加代码
    	git branch dev
        git checkout dev
        在1.txt最后一行增加 lqz nb1
        git add 
        git commit -m '注释'
      # 切换回主分支操作
    	git checkout master
         在1.txt最后一行增加 lqz nb2
        git add 
        git commit -m '注释'
      # 合并分支
    	-git merge dev
        -出冲突了
            <<<<<<< HEAD
            gitlab的第二行
            =======
            gitlab的第一行
            >>>>>>> dev
        -解决冲突,直接删除掉,或者两个都留下
            gitlab的第二行
            gitlab的第一行
        
      # 解决冲突,提交
    	git add 3.txt
        git commit -m '解决冲突'
      # 提交到远程仓库中
        git remote 
        git pull gitlab_origin master
        git push gitlab_origin master

六、线上分支合并

# 本地分支合并----> git merge dev

# 有主分支---->开发分支开发完了---->合并到主分支


# 远端创建dev分支--->本地没有,拉去一下就有了 git pull origin dev
# 本地创建dev分支---->远端没有,推送一下就有了 git push origin dev

# 远端创建dev分支,拉去到本地
	-远端,在网页中点点点创建分支
    	- 左上角,master ---> 管理---> 新建分支
    -本地:git pull origin dev
    -切换过去才能看到:git checkout dev
    
# 本地和远端现在都有了master和dev分支
	-本地的dev分支,删除东西
    -提交到本地版本库
    -推送到远程  git push origin dev
    
    -# 远程分支合并
    	-组员新建pull request---> pr--->(merge request)mr
        -组长审核--->同意---> dev就被合并到master

七、远程仓库回滚

你不要去做

# 本地 
git reset --hard 最初状态
git reset --hard 88aa1e64fa288af495ab6c283b139b7f7f0a237a

git push origin master -f


# 本地代码要提交,本地版本库的内容必须是最新的,git pull 就是最新

八、为开源项目贡献代码

# 1  gitee 找一个开源项目
# 2 点 fork--->复制一份到你的仓库中
# 3 在咱们仓库中,clone--->修改代码--->提交代码--->自己仓库
# 4 在自己仓库中提交pr--->我们本地dev分支申请提交到作者的dev分支
#5 等作者审核过,同意,你就是贡献者了

九、git工作流,git pull,git fetch和变基

# git 工作流:git flow--->分支方案
	-我们没有采用
    
    
# git pull和git fetch
	-git pull 从远程仓库拉取代码:从远程获取最新版本并merge到本地
    -git fetch 从远程仓库拉取代码:会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作
    -git pull =git fetch +merge
    
    
    
# 变基 rebase
	-1 多个提交记录整合成一个
    -2 解决多次合并分叉问题
	

十、pycharm操作git

# 实际开发中,可以完全一点命令都不敲,通过pycharm 点点点
# pycharm 配置好git

# clone 代码

# git add 命令

# git commit 
# git push
# git 分支操作

# 实用的,代码对比
	git reflog
    git log 命令

如果点击了git后没有反应,需要去pycharm的设置中配置好到git的启动文件的路径,看是否正确。

posted @ 2023-06-28 21:32  星空看海  阅读(17)  评论(0编辑  收藏  举报