Road to growth of rookie

Meaningful life is called life

0%

Git 使用记录和常用命令收集

规范明确, 清晰, 一致的 Git 分支管理, 可以帮助在多人协作时更加和谐.

每个人对工具的使用往往各有偏好, 各种方法各有利弊, 无所谓对错. 但涉及团队协作的方面需要有一些一致的规范, 遵守一致的规范也能提升大家的效率.

image

除了一致性之外,这个规范的目的是以下几点:

  • 确保可以轻易确定特定时间发布或运行的版本. 在新发布的程序存在重大缺陷时, 可以尽快 rollback 到上一个稳定版本.
  • 在需要修复紧急 bug 并尽快发布时, 可以只发布必要的 bugfix 而不同时发布还不应发布的其他改动.

Git 分支管理使用规范

branchtag

每个项目的 repo 都应该含有且仅有以下的 branchtag

Branch: masterrelease, 其中 master 对应目前的开发分支, 所有的 pull request 都应该发到这个分支. release 是当前发布的分支,在这个分支只能增加从 master cherrypick 过来的 commit.

Tag: 对应每个发布版本的 tag, SDK 和应用程序的 tag 应该遵照 <major>.<minor>.<patch> 的命名风格,如 2.5.1;服务端程序的 tag 以发布的日期命名, 如 2014.11.13, bugfixtag 应该遵从 <major>.<minor>.<patch>-bugfix 的风格, 如果 tag 已经存在, 则可以使用在后面添加小写字母的方式延续, 例如 2.5.2-bugfix 后面就是 2.5.2-bugfix-a.

在一个 repo 中只应该有以上说的 branchtag, 在开发过程中使用到的 feature branch 等请都放在个人的 fork, 一律通过向 masterpull request 的方式给 repo 提交代码。

新版本发布流程
  • 确保所有要发布的 pull request 都已经 mergemaster;
  • 使用 master branch 的代码进行测试, 如果发现 bug, 把对应的 bugfix mergemaster;
  • 删除旧的 release branch, 并从当前的 master 创建新的 release branch;
  • 发布完成后在当前的 release branch 打上对应版本的 tag.
Bugfix 流程

这里的 bugfix 指的是修复已经发布的程序(release branch)中的缺陷. master 里的 bug 请直接 merge bugfixmaster.

  • 如果此缺陷在 master 中还存在,请先 merge bugfixmaster, 否则跳到下一步;
  • release branchmaster cherrypick 修复该缺陷的一个或多个 commit;
  • 发布完成后在当前的 release branch 打上 tag.

并不是每个 bug 都有专门发布 bugfix 版的必要, 对于不紧急的 bug, 可以在 master 里修复后随下一个版本发布

Git 常用命令收集

撤销本次 Merge

开发过程中, 多多少少总会出现在版本快要上线准备提交代码时, 某个功能延后或剔除的情况, 无奈只能将本次的 merge 撤销掉.

快进合并下和修复完冲突的 Merge 撤销

找到最后一次提交到 master 分支的版本号,即 merge 前的版本号, 并直接回滚

1
$ git reset --hard (merge 前的 commit id)
含有冲突的情况下 Merge 撤销
1
$ git reset --merge
Git 更新单个指定文件

Laravel/Lumen 项目中, 有的时候我们会通过 composer 增加新的扩展包, 在版本发布的时候就需要先更新 composer.jsoncomposer.lock 两个文件, 然后执行 composer install 确保服务不会因为缺少扩展包出错.

如果想拿远端 git 服务器上的最新版本 (或某个特定版本) 覆盖本地的修改, 可以使用 git pull 命令, 但这会 全面更新本地代码库和工作拷贝; 想放弃本地工作拷贝所做修改, 可以使用 git checkout file/to/path 命令, 但该命令只能用本地库覆盖你的工作拷贝, 并不能取得远端版本的更新.

正确的做法应该是先更新本地库 (但不更新工作拷贝), 然后用本地库来更新单个的工作拷贝文件

1
2
3
$ git fetch
$ git checkout origin/master -- composer.json
$ git checkout origin/master -- composer.lock
git log 乱码问题解决

image

1
2
# 在环境变量中增加如下参数
export LESSCHARSET=utf-8
git summary 使用

git summary 可以查看所有贡献者对项目的贡献程度

1
2
# 这个命令默认没有,在mac下需要通过 ``brew install git-extras`` 安装
$ git summary