Git
1、git文档
https://mp.weixin.qq.com/s/BIvx7cnvLBHMKE5lYgcOLw
https://www.runoob.com/git/git-tutorial.html
git branch --merged # 显示所有已合并到当前分支的分支
git branch --no-merged # 显示所有未合并到当前分支的分支
git branch -m master master_copy # 本地分支改名
git checkout -b master_copy # 从当前分支创建新分支master_copy并检出
git checkout -b master master_copy # 上面的完整版
git checkout features/performance # 检出已存在的features/performance分支
git checkout --track hotfixes/BJVEP933 # 检出远程分支hotfixes/BJVEP933并创建本地跟踪分支
git checkout v2.0 # 检出版本v2.0
git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并检出
git checkout -- README # 检出head版本的README文件(可用于修改错误回退)
git merge origin/master # 合并远程master分支至当前分支
git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改
git push origin master # 将当前分支push到远程master分支
git push origin :hotfixes/BJVEP933 # 删除远程仓库的hotfixes/BJVEP933分支
2、git基本命令
1、删除本地分支和远程分支
删除本地分支:
注意,需要切换到别的分支上执行
git branch -d release
强制删除本地分支:
git branch -D release
删除远程分支:慎用
git push origin --delete release
2、添加 远程分支
git remote add origin https://gitee.com/xxxx/wss-cloud.git
3、基于远程某分支创建本地分支
1、方法1:
先切换到远程分支,在拉取最新代码
再给予该分支创建本地分支
2、方法2:
直接给予远程分支创建本地分支
git checkout -b new_branch_name origin/branch_name
4、idea回退已经push的提交
注意,会提前需要切新分支做数据保存,防止出意外
如:已经有四次提交1-4,每次都提交一行
现在回退到 02
预期:内容保留:11 22


方法1
1、选中要回退的提交记录 -》右键 -》 Reset current branch to here

2、选择Hard -》 点击 Reset

这个时候,本地文件就已经回退到02提交了
但是远程仓库还没有回退

3、提交远程
注意,这里不能使用idea上的push,要使用命令强制提交,不然提交的时候,远程的会覆盖本地额
git push -f

方式2 类似于方式1
方式2和方式1,是一样的,不过是使用提交编号回退
1、复制需要回退版本的编号
选中需要回退的记录 -》 右键 -》 Copy Revision Number

2、右击项目名称 》git -》 Reset HEAD

3、回退
1、Reset Type 设置成Hard
2、To Commit 填写之前复制的编号
3、点击Reset

git reset --soft/--mixed/--hard 区别
git 有三个区域
1、工作区:就是我门编辑写代码的区域
2、暂存区:代码add之后,存放的区域
3、本地库:代码commit之后,存放的区域
soft : 将本地库的指针移动到指定位置,就相当于回退了commit,代码处于add阶段,再缓冲区中,status状态是绿色的
mixed:将本地库和暂存区,指针移动到指定位置,就相当于回退了add,代码处于没有add阶段,还在工作区中,status状态是红色的
hard:将本地库、暂存区和工作区,指针移动到指定位置,相当于没有写这些代码,工作区代码都回回退了,没有了

4、提交远程
注意,这里不能使用idea上的push,要使用命令强制提交,不然提交的时候,远程的会覆盖本地额
git push -f

方式3
注意,当前方式,是回退选中提交,如果要回退到指定版本,需要点击下一个提交
比如:要回退到02,需要点击03回退
1、选中要回退版本的下一个提交 》 右键 -》 Reset Commit

2、分支合并
注意,因为远程提交的已经被Reset了,所以合并的时候,直接要远程的就行


3、cherry-pick
摘樱桃
只会合并某个分支的某次提交时候的全部文件
如:
分支a
文件内容:a,b,c
分支b:基于分支a创建,初始文件内容,和分支a相同:a,b,c
后续提交了三次
提交1、加了内容,1 ->a,b,c,1
提交2、加了内容,2 ->a,b,c,1,2
提交3、加了内容,3 ->a,b,c,1,2,3
现在基于a分支,cherry-pick 分支b的提交2
那么只会将分支b的内容:a,b,c,1,2 合并到分支a
git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改
查看分支提交记录
git log --oneline
4、更换远程地址
git remote -v
git remote set-url origin https://github.com/newuser/newrepository.git
git remote -v
6、将暂存区内容恢复到工作区
文件m5 add 到了暂存区,但是工作区的m5文件呗删除了,可以使用下面命令将暂存区文件恢复到工作区
git restore m5

3、GIT规范
dev
开发分支,所有新功能开发、改进、优化等都应该从此分支开始创建功能分支,上线没问题之后,最终合并回此分支。
feature-功能点
功能开发分支,基于dev创建,尽量做到一个功能/一批上线的功能,放在一个feature分支中
test
测试分支,测试环境发布使用的分支,feature分支开发完成之后,合并test分支,进行提测
uat
预发布分支,预生产环境测试分支,用于发布前的功能测试,和release分支保持代码高度一致,减少发布线上BUG率,feature分支合并test之后,测试没问题,再合并该分支,做预发布测试
release
线上环境,线上环境发布使用的分支,feature发布uat测试没有问题之后,合并该分支,发布线上
hotfix-bug点
bug修复分支,线上发现BUG之后,基于release分支创建,进行BUG修复,之后合并test分支,做测试,没问题合并uat做测试,再没问题,合并release,线上没问题之后,合并dev,再合并master做归档
注意:
1、线上运行没有问题之后,将feature分支合并dev分支,再合并master分支做代码归档
2、所有feature/hotfix分支,不能直接合并dev,master,需要等release线上没问题之后再合并
3、如果两个feature功能分支(feature-a、feature-b),需要合并做自测,需要另起第三个feature分支(feature-c),在合并前两个feature功能分支(feature-a、feature-b),做测试,不能直接让两个功能分支(feature-a、feature-b)直接相互合并
4、feature/hotfix分支,可以定期删除
查看分支创建人
git for-each-ref --format='%(refname:short) %(authorname)'
git for-each-ref --format='%(refname:short) %(authorname)' refs/heads/
