实习日记2:git代码管理
mac:brew install git创建
常用命令:git常用命令及详解
一、程序员合并代码
2018年1月中旬,新浪程序员加班合并代码,年会抽中2000股票,因未到现场,损失人民币约77万,77万是该程序猿近3年的工资。
二、git基本知识与常用操作
特点:
分布式
本地分支与远程分支
本地分支是远程分支的完整拷贝
常用操作:
git init初始化
git clone克隆,如 git clonehttp://git.do1.com.cn/szzhdj/web.git
git pull拉取代码
git status查看工作区代码相对于暂存区的差别
git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录
git commit -m‘注释’ 将缓存区内容添加到本地仓库
git push origin xxx将本地版本库推送到远程服务器分支, origin是远程主机
git push -f 表示将目前自己本机的代码库推送到远端,并覆盖
git push -u =》git push origin master
git push origin a_branch:b_branch将本地分支a_branch推送到远程分支b_branch(当本地分支名和远程分支名不一致的时候,需要这样指定推送)
git branch查看本地分支
git branch -d xxx 删除分支
git branch -D xxx强行删除分支
git branch -m oldbranch newbranch修改分支名称
git branch -M oldbranch newbranch强行修改分支名称为newbranch
git checkout xxx切换分支
git checkout -b xxx 以当前分支版本新建并切换到该分支
git checkout -b 本地分支名 origin/远程分支名(拉取远程分支并切换到该分支)
git merge xxx合并某分支
git log --author=“author” 可以查找某一个作者所有的提交
切换源
三、党建项目中应用
代码管理三个历程:
上半年使用svn,下半年开始使用git
有大概三个月时间代码都提交到主开发分支
后来需求增加,版本发布频率高,增加了一个devPlus分支
方案,增加一个中间分支devPlus
第一:可以让大家的不同的需求和任务提交的代码分支都能测试到。
第二:让版本发布更加可控。代码直接提交到develop和cdcwxgzh来发布,问题就是,如果我们提交的某个分支出了问题,比如说组织关系转接有问题,但其他人的分支都没问题,将导致版本不能如期发布,需等待全部问题修复才可发布。而有了devPlus,我们的develop是干净的,可以把其他分支合并到develop,忽略组织关系转接发版本。
如果是旧有bug,基于develop和cdcxgzh分支上改,改完之后合并到devPlus,发布测试验证,测试通过后,把代码提交到develop,因为测试通过后,如果不提交到develop,当devPlus无法发布的时候,那么你修改的bug也会漏掉。
举个栗子:
tapd上有一个组织关系转接的bug,ID1004444,还有一个任务【党群活动】增加报名信息采集功能。
改bug,
我会拉取develop,我本地会有个develop,我在我本地develop上修改,改好之后,我会合并到devPlus,验证通过后,我会把本地develop提交到远程develop。(注,bug改完之后应该尽快验证)
git完整操作:
自动检测
#在本地基于develop创建的分支拉取远程分支develop
git pull origin develop
#改完后,进行本地提交
git add .
git commit -m '修改组织关系转接xxxbug'
#代码合并到devPlus进行测试
git checkout devPlus # 先切换到devPlus
git pull origin devPlus #拉取devPlus
git merge develop #执行合并
#代码提交到devPlus
git status #查看是否有冲突,看到git面板如果有红色的信息,那就是有冲突,需要自己手动解决
git add .
git commit -m 'merge develop'
git push origin devPlus
#测试通过后,我们还要把代码提交到develop,避免develop遗漏已修改好完的bug
git checkout devevlop # 先切换到devevlop
git pull origin devevlop #拉取devevlop
git add .
git commit -m '修改组织关系转接xxxbug'
git push origin devevlop #提交到develop
开发新需求,
我会基于上周发版的分支新建一个分支,在本地建一个分支f_xiaohai_190321_dangqun,开发过程中,我会提交到远程分支f_xiaohai_190321_dangqun,开发完成的时候,我会把它合并到devPlus(切记不要把devPlus合并到f_xiaohai_190321_dangqun),测试。
到了版本发布的时候,如果devPlus的代码都没有问题,那么就直接发devPlus。如果有问题,f_xiaohai_190321_dangqun合并到develop,发develop。
git完整操作:
自动检测
#创建分支
git checkout -b f_xiaohai_190321_dangqun
#开发后,进行本地提交
git add .
git commit -m '【党群活动】增加报名信息采集功能'
#提交到远程分支
git push origin f_xiaohai_190321_dangqun
#代码合并到devPlus
git checkout devPlus # 先切换到devPlus
git pull origin devPlus #拉取devPlus
git merge f_xiaohai_190321_dangqun #执行合并
#代码提交到devPlus
git status #查看是否有冲突,看到git面板如果有红色的信息,那就是有冲突,需要自己手动解决
git add .
git commit -m 'merge f_xiaohai_190321_dangqun'
git push origin devPlus
到这里,我们可以理解,devPlus分支承担了测试功能,develop的角色被用来改bug
为何不能直接合并到主开发分支develop
场景1:项目进度时间紧迫,导致代码质量无法保证迭代版本质量
场景2:项目需求迭代日期调整,导致该需求延期迭代
场景3:同一模块代码多人同时开发,导致无法确认是否存在冲突
命名规则
分支类型_开发者_时间_开发内容
① feature分支:f_yourname_20170416_customLimit【新需求的分支】
② bug分支:bug_yourname_20170416_customLimit【bug分支】
基础分支要基于最近生产版本创建,创建日期也是最近生产版本日期
四、恢复远程仓库上一个版本
有的时候,我们可能会误提交了一些不必要的代码,那么我们可以进行回退再提交
操作步骤:
1、git pull origin xxx拉取要恢复的分支
2、执行恢复:git reset --hard HEAD^(回退到某个版本git reset --hard xxx)
3、强推恢复后的本地分支到远程分支:git push origin xxx:xxx --force【 --force强推命令应该慎用少用,因为有可能你在push的时候别人也在push,会把别人的代码清理掉】
回退某一个版本
git rever thttps://blog.csdn.net/yxlshk/article/details/79944535
五、发布记录
为了方便跟踪代码发布情况,现已在【测试环境】发布、构建工程的同时,生成了本次构建的提交记录,可通过页面查看:
后端-接口服务:http://djdev.qiweioa.cn/publish/changelogs
前端-后台管理:http://djdev.qiweioa.cn/manager/changelogs.html
前端-公众号:http://djdev.qiweioa.cn/wxgzh/changelogs.html
前端-门户:http://djdev.qiweioa.cn/changelogs.html
前端-政务微信:http://djdev.qiweioa.cn/zwwx/changelogs.html
后续,在出现发布完没看到想要的效果,可以通过此排查自己是否push了代码,或者构建的分支是否正确。
六、结语
事实上,我们可能还会遇到更复杂的情况。
我们要牢记:
develop要保持干净,没有通过验证的代码不能推到develop。
新功能分支不要让devPlus污染,我们的新功能分支应该是合并到devPlus,而不是devPlus合并我们的新功能分支。
开发的时候明白自己是在哪条分支开发。
七:git代码图形管理工具
SourceTree
八:问题
解决git pull/push每次都需要输入密码问题
https://blog.csdn.net/lxhjh/article/details/81169918
九、速查表
git config 常用配置选项
git config -e 编辑配置文件git config --local -e 编辑仓库级别配置文件
git config --global -e 编辑用户级别配置文件
git config --system -e 编辑系统级别配置文件
git config 添加配置项目git config --global user.email “you@example.com”
git config --global user.name “Your Name”
十、git提交信息规范
http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html
忽略git pre
https://blog.csdn.net/qq_42833001/article/details/88718349
git commit --no-verify
问题:
假如,test2分支修改了 一处地方为2;test3分支修改了一处地方为3,test2合并到 master,test3合并到master, 这时候master为3, 那么再次合并test2到master, master这时候是什么
答案是:3
原因:
git是按时间来的,就是 时间后面的覆盖时间前面的,以后面的为准
test2是在test3之前修改
所以以test3代码为准