常用命令

  1. git remote show origin 来查看有关于origin的一些信息,包括分支是否tracking
  2. git remote update origin —prune (git remote update origin -p) 刷新所有远程分支代码
  3. git remote # 列出所有远程主机
  4. git branch -r # 列出远程分支
  5. git branch -vv # 查看本地分支和远程分支对应关系
  6. git checkout -b gpf origin/gpf # 新建本地分支gpf与远程gpf分支相关联
  7. git clone -b 分支名 仓库地址 # 克隆指定分支代码
  8. git branch -a # 查看远程分支,本地分支
  9. git checkout 分支名 # 本地分支切换
  10. git merge 分支A # 分支A代码合并到当前分支
  11. git commit —amend # 修改最后一次修改日志
  12. git reset

—mixed
注意:-mixed 为默认参数。git reset —mixed HEAD^ 和 git reset HEAD^ 效果是一样的
不删除工作空间提交的代码,撤销 commit,并且撤销 git add . 操作。
—soft
git reset —soft HEAD^
不删除工作空间提交的代码,撤销 commit,但不撤销 git add . 操作。
注意:就是说仅仅是撤回提交,修改的代码仍然保留在本地仓库。
—hard
git reset —hard HEAD^
删除工作空间提交的代码,撤销 commit,并且撤销 git add . 操作。

  1. git log # 可以显示所有提交过的版本信息
  2. git relog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
  3. git diff
    1. 直接使用Git diff 可以产看当前没有add 的内容修改
    2. 查看已经add 没有commit 的改动 使用 git diff —cached
    3. git diff HEAD 是上面两条的合并
    4. git diff 版本号码1 版本号码2 src : 比较两个版本号码的src 文件夹的差异

例如 git diff branch1 branch2 . > 1.txt

  1. git cherry-pick

    1. 教程 http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

    2. idea-git中文乱码问题

    3. 在idea安装目录下找到idea.exe.vmoptions和idea64.exe.vmoptions文件,在文件的最后添加:

-Dfile.encoding=UTF-8

  1. 在git安装目录下找到etc/bash.bashrc文件,在文件的最后添加:

export LANG=”zh_CN.UTF-8”
export LC_ALL=”zh_CN.UTF-8”

  1. 在Terminal控制台输入:set LESSCHARSET=utf-8

新建git库

  1. git init
  2. git add .
  3. git commit -m “1 commit”
  4. git remote add origin 此处输入你的代码仓库地址 #建立远程分支代码
  5. git push -u origin master
  6. ssh-keygen -t rsa -C”your_email@youremail.com” 生成公钥

Git 分支设计规范


漫话编程 以下文章来源于新亮笔记 ,作者訢亮
这篇文章分享 Git 分支设计规范,目的是提供给研发人员做参考。
规范是死的,人是活的,希望自己定的规范,不要被打脸。
在说 Git 分支规范之前,先说下在系统开发过程中常用的环境。
简称 全称
DEV Development environment
FAT Feature Acceptance Test environment
UAT User Acceptance Test environment
PRO Production environment

DEV 环境:用于开发者调试使用。
FAT 环境:功能验收测试环境,用于测试环境下的软件测试者测试使用。
UAT 环境:用户验收测试环境,用于生产环境下的软件测试者测试使用。
PRO 环境:就是生产环境。
比如,项目域名为:http://www.abc.com,那么相关环境的域名可这样配置:
DEV 环境:本地配置虚拟域名即可
FAT 环境:http://fat.abc.com
UAT 环境:http://uat.abc.com
PRO 环境:http://www.abc.com
接下来,针对不同的环境来设计分支。
分支
分支 名称 环境 可访问
master 主分支 PRO 是
release 预上线分支 UAT 是
hotfix 紧急修复分支 DEV 否
develop 测试分支 FAT 是
feature 需求开发分支 DEV 否
master 分支

master 为主分支,用于部署到正式环境(PRO),一般由 release 或 hotfix 分支合并,任何情况下不允许直接在 master 分支上修改代码。
release 分支

release 为预上线分支,用于部署到预上线环境(UAT),始终保持与 master 分支一致,一般由 develop 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。
如果在 release 分支测试出问题,需要回归验证 develop 分支看否存在此问题。
hotfix 分支

hotfix 为紧急修复分支,命名规则为 hotfix- 开头。
当线上出现紧急问题需要马上修复时,需要基于 release 或 master 分支创建 hotfix 分支,修复完成后,再合并到 release 或 develop 分支,一旦修复上线,便将其删除。
develop 分支

develop 为测试分支,用于部署到测试环境(FAT),始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度确定是由 feature 分支合并,还是直接在上面开发。
一定是满足测试的代码才能往上面合并或提交。
feature 分支

feature 为需求开发分支,命名规则为 feature- 开头,一旦该需求上线,便将其删除。
这么说可能有点不容易理解,接下来举几个开发场景。
开发场景
新需求加入

有一个订单管理的新需求需要开发,首先要创建一个 feature-order 分支,问题来了,该分支是基于哪个分支创建?
如果 存在 未测试完毕的需求,就基于 master 创建。
如果 不存在 未测试完毕的需求,就基于 develop 创建。
需求在 feature-order 分支开发完毕,准备提测时,要先确定 develop 不存在未测试完毕的需求,这时研发人员才能将将代码合并到 develop (测试环境)供测试人员测试。
测试人员在 develop (测试环境) 测试通过后,研发人员再将代码发布到 release (预上线环境)供测试人员测试。
测试人员在 release (预上线环境)测试通过后,研发人员再将代码发布到 master (正式环境)供测试人员测试。
测试人员在 master (正式环境) 测试通过后,研发人员需要删除 feature-order 分支。
普通迭代

有一个订单管理的迭代需求,如果开发工时 < 1d,直接在 develop 开发,如果开发工时 > 1d,那就需要创建分支,在分支上开发。
开发后的提测上线流程 与 新需求加入的流程一致。
修复测试环境 Bug

在 develop 测试出现了Bug,如果修复工时 < 2h,直接在 develop 修复,如果修复工时 > 2h,需要在分支上修复。
修复后的提测上线流程 与 新需求加入的流程一致。
修改预上线环境 Bug

在 release 测试出现了Bug,首先要回归下 develop 分支是否同样存在这个问题。
如果存在,修复流程 与 修复测试环境 Bug流程一致。
如果不存在,这种可能性比较少,大部分是数据兼容问题,环境配置问题等。
修改正式环境 Bug

在 master 测试出现了Bug,首先要回归下 release 和 develop 分支是否同样存在这个问题。
如果存在,修复流程 与 修复测试环境 Bug流程一致。
如果不存在,这种可能性也比较少,大部分是数据兼容问题,环境配置问题等。
紧急修复正式环境 Bug

需求在测试环节未测试出 Bug,上线运行一段时候后出现了 Bug,需要紧急修复的。
我个人理解紧急修复的意思是没时间验证测试环境了,但还是建议验证下预上线环境。
如果 release 分支存在未测试完毕的需求,就基于 master 创建 hotfix-xxx 分支,修复完毕后发布到 master 验证,验证完毕后,将 master 代码合并到 release 和 develop 分支,同时删掉 hotfix-xxx 分支。
如果 release 分支不存在未测试完毕的需求,但 develop 分支存在未测试完毕的需求,就基于 release 创建 hotfix-xxx 分支,修复完毕后发布到 release 验证,后面流程与上线流程一致,验证完毕后,将 master 代码合并到 develop 分支,同时删掉 hotfix-xxx 分支。
如果 release 和 develop 分支都不存在未测试完毕的需求, 就直接在 develop 分支上修复完毕后,发布到 release 验证,后面流程与上线流程一致。
并行提测

在一个项目中并行开发了两个需求,并行提测,但是上线日期不同。
我能想到的两种方案:
再部署一套可供测试人员测试的分支
使用 git cherry-pick “挑拣”提交
对于并行提测,你有好的方案吗?欢迎留言。
Commit 日志规范
提交信息一定要认真填写!
建议参考规范:(scope):
比如:fix(首页模块):修复弹窗 JS Bug。
type 表示 动作类型,可分为:
fix:修复 xxx Bug
feat:新增 xxx 功能
test:调试 xxx 功能
style:变更 xxx 代码格式或注释
docs:变更 xxx 文档
refactor:重构 xxx 功能或方法
scope 表示 影响范围,可分为:模块、类库、方法等。
subject 表示 简短描述,最好不要超过 60 个字,如果有相关 Bug 的 Jira 号,建议在描述中加上。