我每天要用git敲很多命令,其中很多是重复了同样的流程。比如上班来到公司,先checkout到master,pull下来,checkout到自己的分支,rebase一下,以保证和master同步。我很懒,每天上班都在各种找办法偷懒,今天学到一招,可以自定义git命令。
自定义一个命令分三步:
- 写一个脚本,放到PATH的路径下,脚本名字是git-command
- 编辑脚本
- 增加执行权限
下面举一个例子。我经常要做的操作是,提了一个PR,然后测试,review出现问题,改一下自己的commit,再提交一下。对于flake8和lint错误,一般用ammend,流程如下:
1 2 3 |
git add -A git commit --amend --no-edit git push -f |
第一步。通过echo $PATH
命令可以看你的执行路径,这里以/usr/bin
为例。(其实更好的方法是将用户命令和系统命令分开,我的自定义脚本路径是~/bin/
。)
1 |
sudo touch /usr/bin/git-amd |
第二步,在脚本写以下内容,保存退出。(脚本也支持python ruby等)
1 2 3 4 5 |
#!/bin/zsh git add -A git commit --amend --no-edit git push -f |
第三步,增加执行权限。
1 |
sudo chmod +x /usr/bin/git-cmd |
完成,现在修改一些小问题,我们可以直接修改之后使用git cmd
命令推送更新了。(注意这个命令用到-f推送所以有点危险不建议学我)
另外还有一个偷懒的办法是alias。这里的alias不需要使用shell的,git提供了这个feature。直接在~/.gitconfig
路径下对git的子命令进行alias即可。如下面这个.gitconfig文件所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
[user] name = Your Name email = your.name@mail.com [color] ui = true [core] excludesfile = ~/.gitignore_global editor = /usr/local/bin/mvim -f [mergetool "p4merge"] cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED" keepTemporaries = false trustExitCode = false keepBackup = false [diff] tool = opendiff #external = p4diff #external = meldDiff [github.com] user = github-username token = your-token [java.net] user = username [color] diff = auto branch = auto status = auto [http] sslVerify = false [alias] st = status d = diff --color-words dw = diff --word-diff ci = commit -v cia = commit -v -a ca = commit -a -m co = checkout -b cp = cherry-pick l = log ll = log -p lod = log --oneline --decorate lgraph = log --oneline --decorate --graph b = branch pom = push origin master pullit = pull --rebase ads = submodule add rem = remote add origin headless = !sh -c 'git symbolic-ref HEAD refs/heads/$0 && rm .git/index && git clean -fdx' unstash = stash branch [git-tmbundle] gitx-path = /Applications/GitX.app [push] default = simple [commit] template = /Users/youuser/.gitmessage.txt |
学到了