企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
目的:1.统一团队的Git工作流 2.统一团队Git Commit日志标准,可通过日志快速了解改动模块 作者:高斌 ## 一、Git工作流 * * * ### 1.Git分支创建规范: `dev`为日常开发分支 `preview`为测试版分支 `master`为主分支,禁止直接在此分支进行代码修改和提交 `feature`新功能开发分支,完成后合并到dev分支进行测试 `fix`线上紧急漏洞修复分支,从master分支拉取创建,修复完bug后合并到dev和master分支(需在dev完成测试后才能合并master分支) `feature`和`fix`分支可在使用后删除,具体视个人情况而定 ### 2.分支使用规范 日常开发在dev分支上进行 有测试环境时,上线前需要先将代码合并到preview分支上进行提测,测试无误后将preview分支合并到master分支进行正式版提交 理论上master分支不能做任何改动,只能合并其他分支。 禁止在master分支上直接修改文件进行提交,很容易与其他分支及团队成员产生冲突,破坏分支之间的关联关系 ## 二、Git提交规范 每次提交必须按照规范,写明本次提交的类型(方便快速了解本次改动内容),并对修改内容做出明确描述 * 提交格式 * 提交类型:1.提交描述  2.提交描述2 * 提交类型 * `fix`:问题的修复 * `feat`:有新功能的增加 * `update`:现有功能模块的代码改动 * `improve`:优化某个模块 * `debug`:提交某个功能模块的调试代码 * `refactor`:重构某个模块 ~~~ 示例: (单种修改类型) feat: 1.新增xxx功能 2.新增yyy功能 (多种修改类型) feat + update: 1.新增xxx功能 2.更改xx模块样式 ~~~ 示例: 简明扼要阐述本次改动,达到看提交记录就能明确了解本次改动的程度。 ![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-WHXFRU.png) ## 三、Git Stash贮藏功能 * * * 使用场景:线上有紧急bug要修复,必须切到master分支上创建fix分支进行修复。但是你目前在dev分支功能开发了一半,又不想将开发一半的代码提交,那么就可以用Git stash 命令把你目前未提交的代码先贮藏起来,等修好bug,从master分支上切回dev分支之后,再把改动从贮藏中恢复到dev分支,然后继续开发。 官方文档:→[链接](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E8%B4%AE%E8%97%8F%E4%B8%8E%E6%B8%85%E7%90%86) ~~~ git stash save "当前存储的变动描述" : 执行存储时,添加备注 (执行存储后,会把改动文件从当前分支中还原) git stash list : 查看stash列表 git stash apply : 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} git stash pop : 恢复之前缓存的stash,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1} git stash drop stash@{$num} : 丢弃stash@{$num}存储,从列表中删除这个存储 git stash clear : 删除所有缓存的stash ~~~ **Sourtree快捷使用:** 1.点击顶部贮藏按钮,在弹出框中输入此次贮藏内容概要 2.左侧会已贮藏列表可以进行贮藏应用或删除贮藏代码 ![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-ggJCcM.png?imageMogr2/thumbnail/1000) ## 四、Git Tag标签功能 * * * 基本所有成体系的项目都会在项目发版时进行标签标记 例如下图: ![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-p7nd8U.png?imageMogr2/auto-orient/thumbnail/1200) * 分支代表的是一条时间轴,汇聚了一系列的提交历史操作,并可进行回溯,而标签标记的是一个时间点,标识了一个特定时刻,类似版本库的一个快照。 * 通过获取某个标签的版本,就可以把当时的历史版本取出来 官方文档:→[链接](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE) **Sourtree快捷使用:** 1.在对应的commit上右键点击标签选项,然后输入标签的名称 2.在左侧列表将刚创建的标签推送到远程仓库 ![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-hvH1AF.png?imageMogr2/thumbnail/1000) ## 五、查看commit合并时间 * * * 在 Git 配置文件 `~/.Gitconfig` 中追加以下别名: ~~~ [alias] find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'" show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'" ~~~ 之后就可以下面这样使用了: ~~~ # 当前分支 git find-merge <SHA-1> # 指定分支 git find-merge <SHA-1> master ~~~ 示例: ~~~ on master ◦ git find-merge 0c205019ac75f1fc09a7fdd6079461328abc3137 23:02:37 6cbd92e271de540e98f4157132ba47973e3cb07b(通过这次提交合并进入) on master ◦ git show-merge 0c205019ac75f1fc09a7fdd6079461328abc3137 23:06:06 commit 6cbd92e271de540e98f4157132ba47973e3cb07b Merge: 9ab0014 e22126f Author: 亮 <liang.huang> Date: Fri Apr 28 21:04:33 2017 +0800 Merge branch '20170413-v4.5.0-share' into '20170428-v5.1.0' 分享页面、首页弹屏、banner修改、push和消息页面跳转 See merge request !125 ~~~ ## 六、Git常用操作 * * * ### 1.将本地项目添加到远程仓库 ~~~ 在本地项目中执行以下命令 git init (初始化git项目,已经初始化过的无需执行) git remote add origin 远程仓库地址 git add . (添加项目所有文件) git commit -m '项目初始化' git pull origin master (pull如果报错可尝试此命令解决 git pull origin master --allow-unrelated-histories) git push origin master ~~~ ### 2.版本回滚 ~~~ 1.回退到当前版本(放弃所有修改) git reset --hard 2.撤销某个文件的修改 git checkout demo.js 3.回退到某一版本但保存自该版本起的修改 git reset 版本号 4.回退到和远程版本一样 有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的位置,执行的命令如下 git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名 5.回退远程仓库的版本 先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行: git push <仓库名> <分支名> -f 6.本地强制与远程仓库同步 git reset --hard origin/分支名 ~~~ ### 3.解决代码冲突 合并代码后,因多人修改同一模块,可能会产生代码冲突,此时需要手动解决。 ~~~ 示例:以下是冲突代码提示 <<<<<< HEAD const demo = 111; ====== const demo = 222; >>>>>> 865sdf7612b3u23h4234 说明: <<<<<< HEAD 此区间的代码指,当前分支下你所改动的代码 ====== 此区间代表你合并代码后,他人改动的代码 >>>>>> 865sdf7612b3u23h4234 需要对比两个区间的代码,根据实际情况修改代码,修改完成后,删除所有冲突标记。 然后执行以下操作: git add . git commit -m "fix:解决代码冲突" git push origin 分支名` ~~~ ### 4.查看合并操作记录 你可以使用以下命令来查看Git分支的合并操作记录: ~~~ git reflog show <branch-name> ~~~ 这将显示指定分支的所有合并操作记录,包括合并后的提交和回滚操作。如果省略`<branch-name>`参数,则将显示当前分支的所有合并操作记录m 增加`--oneline`可查看简易信息. ### 5.查看分支merge记录 你可以使用以下命令来查看Git分支的合并记录: ~~~ git log --merges <branch-name> ~~~ 这将显示指定分支的所有合并记录,包括其它分支合并到该分支的记录。如果省略`<branch-name>`参数,则将显示当前分支的所有合并记录。 ### 6.切换仓库远程地址 ~~~ # 查看当前远程代码库信息 git remote show origin # 可将现有代码库切换到其他远程仓库 git remote set-url origin 新仓库地址 ~~~