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的启动文件的路径,看是否正确。