一行Git打天下

75 阅读3分钟

一行Git打天下

  1. 批量拉取各个分支最新代码
  2. 提交当前分支到远程
  3. cherry-pick当前分支代码
  4. ......

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等这些参数怎么处理, 多个参数如何解析等等, 要搬砖了, 下期分享..

e6f41df7ffcb3b9fd85c37531062dad7.jpeg