一行Git打天下
- 批量拉取各个分支最新代码
- 提交当前分支到远程
- cherry-pick当前分支代码
- ......
vscode或者各个可视化git工具其实本身已经带有提交等的功能. 可视情况使用.
产出原因
个人习惯用git原生命令做pull, commit, cherry-pick等. 但像commit等命令, 都是需要先add在commit, 如果还需要合并到其余分支, 则还需要提交完当前分支在切换下一分支, 做cherry-pick操作, 然后提交, 个人觉得比较繁琐, 就把所有步骤集成在一行命令下处理.
cherry-pick
可能很多用了三五年的小伙伴还不知道这个命令, 科普下先.
假设当前分支是dev, 你已开发好某个功能, 提交到了当前分支, 提交的commitId为XXXXXX; sit为测试分支, 你需要把dev上开发好的功能合并到sit给测试人员测试. 这里最暴力的方式是merge dev. 这样做是OK的,但不够优雅.
假设dev上正好有其他同事提交的部分代码, 你的merge操作就把你同事的代码也合并到了sit, 可能这部分代码并不是同事想提交上去的.
这时,cherry-pick就有用武之地了. 你的操作理应永远只操作你自己的提交.
所以, 在你切换到sit之后, 最好的方式还是git cherry-pick XXXXXX; 上面的意思是, sit分支只合并你dev上开发提交的commitId为XXXXXX的那部分代码.
但是, 发现没, 到此, 你先add了dev的代码, commit, push, checkout sit, cherry-pick XXXXXX, 之后还要提交sit等. 繁琐!
于是, 就有了如下命令: npx gitoperate ccp feat "提交的Msg" sit 一行命令完成如上操作
详解
npx 这个是用于在不下载gitoperate的情况下直接使用, 不懂的点击下看看大佬的解释.
gitoperate 使用方式: gitoperate [options] [command]
暂时有如下功能:
pull|p pull, 拉取, 后接想拉取的各分支, 多个分支空格隔开
commit|c <type> <msg> commit, 提交类型<type>, 提交语<msg>, 并推送
cherry-pick|cp <branch> cherry-pick到<branch>分支, 并推送
commit-cherry-pick|ccp <type> <msg> <branch> commit, 提交类型<type>, 提交语<msg>, 然后cherry-pick到<branch>分支, 并推送
原理
类似的命令其实很多很多年前就有了, 看到掘金上类似文章不多, 故分享下.
当你npm install -g XXXXX的时候, XXXXX就能在你当前node版本下全局运行. 我们用了这一规则, 发布一个自己的包gitoperate到npm上, 然后他人npm install -g gitoperate. 想想, 是不是之后就能直接使用gitoperate了.
那怎么发布自己的包到npm呢.
其实很简单, 新建一个名为gitoperate的文件夹, 然后npm init, 会在文件夹下生成一个package.json的文件,
{
"name": "gitoperate",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "nocodeempire",
"license": "ISC"
}
在其中加入一行得到如下
{
"name": "gitoperate",
"version": "1.0.0",
"description": "",
"main": "index.js",
"bin": {
"gitoperate": "index.js"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "nocodeempire",
"license": "ISC"
}
bin下的gitoperate就是我们最后能在命令行使用的命令, 指向文件index.js
新建文件index.js, 内写下console.log('gitoperate');
要link到本地测试命令是否可用的话, 在文件夹下打开命令行工具, npm link即可;
在命令行中npm publish即可发布当前命令, 当然了,重复命令肯定是不行的, 起一个属于自己的命令在发布.
之后的逻辑就是怎么处理这个命令后面的参数了, pull, commit等这些参数怎么处理, 多个参数如何解析等等, 要搬砖了, 下期分享..