前言

随着 git 的使用普遍化,现在更需要关注使用的规范流程,在此纪录。

目录

  • 漂亮的徽章
  • 更好的 pull
  • 配置代理及取消代理
  • rebase 命令修改 commit 提交历史
  • Git-merge 时忽略文件

漂亮的徽章

持续集成

Build Status codecov

npm

NPM version NPM monthly downloads NPM total downloads gzip size

自定义

可以自定义修改 左侧 label 文字,右侧颜色

GitHub GitHub issues

其他

Badge GitHub issues GitHub last commit GitHub

更好的 pull

起因

Snipaste_2020-01-04_19-13-11.png

git pull origin xxx --rebase

# 直接按 rebase 的方式执行 pull
git config --global pull.rebase true

使用 rebase 就感觉所有人都在同一条直线上开发一样,很干净的 log,看着很舒服,而直接使用 pull 的 log 看起来就很乱。

git pull --rebase

* | b9feea8 - chore: 添加C前往A埋点 (6 hours ago) <yanyue404>
* | b3047fe - fix: ISO8601 time (6 hours ago) <yanyue404>
* | bfb6c84 - test: formatTimeStr 兼容 ios (7 hours ago) <yanyue404>
* | 0e13196 - chore: IOS 时间处理 (22 hours ago) <yanyue404>
* | f15a0e8 - chore: 游客在名片页面进行授权 (24 hours ago) <yanyue404>
* | ee8b125 - chore: 完善个人名片 (25 hours ago) <yanyue404>
* | deb7a5a - chore: 个人名片添加用户角色校验 (26 hours ago) <yanyue404>
* | 5106b02 - chore: 开始识别用户角色 (27 hours ago) <yanyue404>
* | f16b6af - chore: 更换 appid (31 hours ago) <yanyue404>
* | 7216da4 - chore: 同步 code (31 hours ago) <yanyue404>
* | 9e542b4 - chore: uat 更新 (6 days ago) <yanyue404>
* | 473e311 - fix: 修改环境 (6 days ago) <yanyue404>
* | f54ae0f - chore: 埋点 (5 hours ago) <yanyue404>

git pull

* | ae57454 - feat: token 过期强制重新认证 (2 days ago) <yanyue404>
* |   1b02194 - Merge remote-tracking branch 'origin/prod' into prod (2 days ago) <Joe>
|\ \
| * | 6284b85 - fix: 登录流程短视频播放 (2 days ago) <yanyue404>
| * | 2bcb162 - styles: canvas 分享图位置优化 (2 days ago) <yanyue404>
| * | d4c66a6 - chore: 页面分享控制 (2 days ago) <yanyue404>
| * | 91baa28 - chore: 个人名片非分享人文字修改 (2 days ago) <yanyue404>
* | | 60715e9 - 修改保单判断 (2 days ago) <Joe>
|/ /
* |   85f1032 - Merge remote-tracking branch 'origin/prod' into prod (2 days ago) <Joe>
|\ \
| * | ab884df - feat: 个人名片分享页授权 (4 days ago) <yanyue404>
* | | e603434 - 优化加载速度 (2 days ago) <Joe>
|/ /
* | a255e59 - 微调样式  评论换行 (4 days ago) <Joe>
* |   7251630 - Merge remote-tracking branch 'origin/prod' into prod (4 days ago) <Joe>
|\ \
| * | 1bd08fc - chore: loading 优化 (4 days ago) <yanyue404>
* | | 7bc0e9e - 修改视频列表问题 (4 days ago) <Joe>
|/ /
* | 9e328af - 1.取消我的视频    个人名片换上来 (4 days ago) <Joe>

配置代理及取消代理

Error: Filed to connecto to github.com port 443: Time out
# 设置
git config --global http.proxy http://127.0.0.1:51349

# 取消
git config --global --unset http.proxy

rebase 命令修改 commit 提交历史

合并最近提交的历史,将 ba4358da549037 变为一个 commit

# 输入
git log --online

# 输出
ba4358d (HEAD -> master, origin/master, origin/HEAD) docs: 重
ba4358d Update README.md
ba4358d Update README.md # 此条目以上合并为一条
36f95d9 docs
0312afb init

准备合并

git rebase -i 36f95d9 | git rebase -i HEAD~3

选择合并

# 输出

pick ba4358d   '注释**********'

pick ba4358d   '注释*********'

pick ba4358d   '注释**********'

# pick 的意思是要会执行这个 commit
# squash 的意思是这个 commit 会被合并到前一个commit (省略写法 s)
# 在 vim 命令下输入 i 进入编辑模式,编辑完成后 :eq 保存退出

# 输入

pick 3ca6ec3   '注释**********'

s 1b40566   '注释*********'

s 53f244a   '注释**********'

保存完成后,你有两个选择

git rebase --continue  #  确认 rebase
git rebase --abort     # 取消 rebase

#确认后,就可以上传到远程了。

如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口, 输入:wq 保存并推出:

# This is a combination of 4 commits.
#The first commit’s message is:
注释......
# The 2nd commit’s message is:
注释......
# The 3rd commit’s message is:
注释......
# Please enter the commit message for your changes. Lines starting # with ‘#’ will be ignored, and an empty message aborts the commit.

查看历史,已经改变

git log --oneline
d2d71a5 (HEAD -> master) Update README.md
36f95d9 docs
0312afb init
git push -f  # 强制覆盖远程
git commit --amend -m "新的注释" # 修改最新的 git commit 注释

Git-merge 时忽略文件

提醒: 只能 master 合并其他分支时忽略其他分支上的文件, 其他分支合并 master 无法忽略 master 上的文件. (master 为默认主分支)
  1. 创建自定义 merge driver
git config --global merge.ours.driver true
  1. 在要被 merge 的分支上创建.gitattributes 文件,并且在文件中置顶不 merge 的文件名
project.config.json merge=ours
fetch.js merge=ours
app.js merge=ours
  1. 回到要合并到的分支 master,执行 merge:
git merge uat

uat 分支上的project.config.jsonfetch.jsapp.js 就不会被合并了 !

参考链接


RainBow
1k 声望16 粉丝

一个喜欢唱歌的前端工程师.