通过使用 git 别名,可以让 git 生活更加方便
我犯了一个错误:
–get-regexp的选项写成了–get-regex…
Git似乎会自动补全选项,所以它的功能没有问题。(我刚试了–get-r,也可以正常工作。)
不过,我认为在配置文件等地方最好写上正式名称,所以我建议在看到这个页面的人对此进行修正。
git alias可以理解为Git命令的别名。
Git的别名功能非常方便。
我想请教其他人他们推荐的别名,借此展示我的。
顺便提一下,作为我的个人喜好,大部分别名是带选项的命令,它们被设置得简短且易于理解。我基本上不设置将多个命令组合在一起的别名,因为它们可能会使得灵活性降低(比如一次性执行“add”和“commit”之类的命令)。
所以我試著暴露出來
[alias]
aliass = !git config --get-regexp alias
amend = commit --amend
cancel = reset --mixed HEAD^
fdiff = diff --ignore-all-space --no-index
files = !cd ${GIT_PREFIX:-.} && git ls-tree -z --name-only HEAD | xargs -0 -n1 -I@ -- git log -1 --pretty=format:'%C(green)%ai%Cr eset %C(yellow)%h%Creset @ %C(blue)(%ar)%Creset %C(red)<%an>%Creset' -- @
forcepush = push --force
fwdiff = diff --ignore-all-space --word-diff --no-index
ibase = !sh -c 'git rebase -i --autosquash $(git merge-base ${1:-master} HEAD)' -
l = log --oneline
ld = log --decorate --oneline
lg = log --decorate --oneline --graph
life = !echo "No Git, No Life"
lm = log --oneline origin/master..
lp = log --abbrev-commit --color --pretty=format:'%C(yellow)%h%Creset -%C(yellow reverse)%d%Creset %s %C(blue)(%cr)%C(red)<%an >%Creset'
ls = log --decorate --oneline --stat
me = !git config --get-regexp user
nerge = merge --no-ff
noskip = update-index --no-skip-worktree
plune = !git branch --merged | grep -vE '(master|develop|release|gh-pages|\\*)' | xargs git branch -d
purr = pull --rebase
pwd = rev-parse --show-prefix
skip = update-index --skip-worktree
stat = !cd -- ${GIT_PREFIX:-.} && git stash list && git status --short --branch
up = !git branch -u origin/$(git branch --show-current)
unstage = reset HEAD --
wdiff = diff --ignore-all-space --word-diff
讲解
化名
显示已设置的别名列表的别名。
实际上,复数形式是aliases,但是为了方便打字,我使用aliass。
git config的–get-regexp选项非常方便,可以用来确认特定的配置,所以除此之外也可以用来确认其他配置。
修改
经常在修改历史时使用 git commit –amend 变得很麻烦,现在可以通过 git amend 进行追加。
取消
在内部讨论git reset的时候,有人说:“如果在不小心使用了git reset –soft HEAD^之后,你可以立即使用它将状态恢复到上一次提交之前,并重新提交。这对于在错误的分支上提交时很有用。”我觉得这确实是一个很实用的命令,所以我给它设置了别名。
因为“cancel”在各种场合都可以使用,所以我在这里稍微有些犹豫是否可以使用它,但由于它很容易理解,所以暂且打算用它。
差分,前向差分
之前的git diff可以在不受git管理的文件上执行并查看,但最近必须加上–no-index才能实现这一点,因此我将其命名为fdiff,表示文件差异。
文件
非常长。即使去除了漂亮的格式化,仍然相当长。
输出如下,包括 GitHub 上看到的每个文件/目录的最后更新日期的文件列表。我当初之所以想要它,但在制作的过程中忘记了为什么想要它。嗯,我以后会想起来的。
$ git files
2017-02-10 03:13:36 +0900 30036d3 .eslintrc.json (10 weeks ago) <takayukioda>
2017-02-07 02:03:14 +0900 b13d52e .gitignore (2 months ago) <takayukioda>
2017-02-02 23:48:04 +0900 dc2cfcc README.md (2 months ago) <takayukioda>
2017-02-06 00:33:41 +0900 a700ee2 index.js (2 months ago) <takayukioda>
2017-02-22 01:55:32 +0900 70afed6 lib (8 weeks ago) <takayukioda>
2017-02-05 11:49:32 +0900 4f3aba6 package.json (2 months ago) <takayukioda>
2017-02-05 11:18:57 +0900 229d8ce yarn.lock (2 months ago) <takayukioda>
实际上,由于使用了漂亮的格式,看起来更好一些。
然而命令太长了。
额外记录:
根据我的理解,git alias 是在 git 仓库的顶层目录中运行的,如果不基于 GIT_PREFIX 进行 cd 操作,它将无法按预期工作。
另外,当处于顶层目录时,GIT_PREFIX 会变为空,并跳转到主目录,因此我设置了默认值”.” 来解决这个问题。
强制推动
当我改变分支历史时,使用-f选项会更简单,但有时会忘记加上。虽然有点长,但我还是会直接使用原名,这样可以明确表示“我在强制进行这个操作!”。
基址(从@uasi的评论中)
最近我开始充分利用 GitHub 并且更频繁地使用 rebase,所以这一点非常感激。
比起减少键入的数量,我更想保持对原始命令的一定了解,所以选择使用交互式的 rebase,即 ibase。
稍后查询git merge-base的内容。[待办事项]
一、了、里、冷、历、楼、六
与日志相关的别名。装饰万岁。
基本上通过一行来紧凑显示,通过图形和统计来确认状态。
个人而言,我经常使用l和~lg~ls。
毋庸置疑地,當然有意識到了一些 ls 命令(゜ω、゜)
最近添加的命令中,lm 很方便而且实用。使用 git l 命令时,所有的日志都会使用 pager 进行显示,但有时无法看到最上面的日志,不太方便。而 lm 命令会显示从 orign/master 开始的日志,日志量适中,更易于了解工作进展情况。
生活
这只是个玩笑。
我
有时候在分别公司账户和个人账户时,突然会对自己当前的设置产生兴趣,因此有了这样的别名。如果使用这个别名,就只会显示user.xxx的设置,不会显示github.user的设置。
me = !git config --get-regexp user\.
要做一个类似的事情可能会比较好。
然后会同时出现全局和本地的,但是可以省略的。
如果把唯一的命令通过管道传输,可能可以做到吗?
哪一个
合并的时候不要快进,想要使用 no fast forward。那种渗透出这种想法的别名。但是由于频繁使用 rebase 和 pull request,所以并没有太多的活跃度。
请提供完整的句子或上下文,以便进行准确翻译。感谢!
定期清理当前分支中已合并的分支的命令,用于当分支补全过多时定期执行以保持整洁。
发出呜呜的声音
虽然拉取但想要使用rebase。这样想可能比从远程仓库拉取更不方便,但我正在设定中以意识到”这是rebase”。因为我通常在使用GitHub时都是基于pull –rebase。
依照(根据@uasi的评论)
根据评论,好像已经设置为显示stash,但是我个人并没有遇到过使用stash困扰的经历,所以暂时没有显示。如果频繁忘记stash的话,可能值得尝试添加进来。因为我开始使用stash所以我添加了它。
状态的简短版本似乎很容易理解和好的。
取消演出(来自@hage@github的评论)
由于“reset”命令有多种用途,通过缩小功能范围可以减少错误,这确实让人感到高兴。而且一眼就能明白“unstage”的命名方式也很不错。
跳过,不跳过。
「我会进行管理,但不希望推送本地更改(例如,希望使用.htaccess文件,但在本地开发环境中需要使用RewriteBase)。在这种情况下,可以使用update-index –skip-worktree命令。由于命令较长,可以设置为skip / unskip以便进行切换。还有一个类似的选项–assume-unchanged/–no-assume-unchanged,如果经常使用的话,也可以将其设置为assume以进行配置。」
wdiff can help identify differences between two texts.
git diff 能够用作为普通的 diff,因此非常有用。
修改SQL并使用word diff来确认是否除了想改变的部分外,还是否有其他改动。
如果你有任何推荐的git别名,请告诉我。
期待着你的推荐,期待着你在Qiitarian上的推荐!