分支管理
基本原则
【dev,feature】【release】【master,hotfix】
AoneFlow 只使用三种分支类型:master分支、feature分支、release分支,以及三条基本规则。
规则一,开始工作前,从master创建feature分支。
从代表最新已发布版本的master分支上创建一个通常以feature前缀命名的特性分支,然后在这个分支上提交代码修改。也就是说,每个工作项(可以是一个人完成,或是多个人协作完成)对应一个特性分支,所有的修改都不允许直接提交到master分支。
规则二,通过合并feature分支,形成release分支。
从master分支上拉出一条新分支,将所有本次要集成或发布的feature分支依次合并过去,从而得到release分支。release分支通常以release前缀命名。
规则三,发布到线上正式环境后,合并相应的release分支到master分支,在master分支上添加tag,同时删除该release分支关联的feature分支。
为了避免在代码仓库里堆积大量历史上的feature分支,还应该清理掉已经上线部分feature分支。如果要回溯历史版本,只需在master分支上找到相应的版本的tag即可。
Hotfix处理
除了基本规则,还有一些实际操作中不成文的技巧。比如上线后的Hotfix,正常的处理方法应该是,创建一条新的release分支,对应线上环境(相当于Hotfix分支),同时为这个分支创建临时流水线,以保障必要的发布前检查和冒烟测试能够自动执行。
其实还有一种简便方法是,将线上正式环境对应的release分支上关联的feature分支全部清退掉,在这个release分支上直接进行修改,改完利用现成的流水线(Pipeline)自动发布。如果非得修一个历史版本的Bug怎么办呢?那就老老实实地在master分支找到版本tag位置,然后从那个位置创建 Hotfix分支。
基础操作
拉取项目
fetch
将远程仓库所包含的分支的最新commit – id 记录到本地文件
pull
将远程仓库所包含的分支拉到本地,并进行合并。
相当于git fetch + git merge
check-out
选择当前工作分支
合并与回滚
merge
把分叉的提交历史放回到一起的方式
git merge 操作是区分上下文的。
当前分支始终是目标分支,其他一个或多个分支始终合并到当前分支。
所以,当需要将某个分支合并到目标分支时,需要先切到目标分支上。
git merge --abort
当合并的过程中,由于冲突难解决,你想放弃合并,回到未合并之前的状态;
reset commit
每次提交的代码都有一个唯一的commit id(版本号),当然,也可以通过 git log 查到。
回滚到指定版本:
git reset --hard b498237e6dc1fc4861c79d3314d07285995b
cherry-pick
把指定的commit,拉到一个新的分支上
提交代码
add
添加到版本管理
commitFile
提交文件
commitDirectory
提交目录
push
将本地当前分支的代码推送到远程指定的分支上
提交记录查看
annotate
注释,显示当前代码所有行,是哪一天,谁提交的。
show History
显示提交记录
show History For Selection
显示代码块的提交记录
统计
查看所有人的提交行数
git log --format='%aN'
| sort -u | while read name;
do
echo -en "$name\t";
git log --author="$name" --pretty=tformat: --numstat
| grep "\(.java\)$"
| awk '{ add += $1; subs += $2; loc += $1 - $2 }
END
{ printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -;
done
某个时间段的提交行数
git log --author=Username --since=2023-01-08 --until=2023-01-10 --format='%aN'
| sort -u
| while read name; do echo -en "$name\t";
git log --author="$name" --pretty=tformat: --numstat
| grep "\(.html\|.java\|.xml\|.properties\)$"
| awk '{ add += $1; subs += $2; loc += $1 - $2 }
END
{ printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -;
done