gitコマンドのエイリアスを設定する

2022.04.20
2024.03.24
開発環境
git

はじめに

gitコマンドのエイリアスの設定方法を紹介します。

gitのエイリアス

gitコマンドのエイリアスはgitの設定ファイルで定義することができます。

下記のように設定することで、git agit addを実行できます。

1[alias]
2  a  = add
3  b  = branch
4  c  = commit
5  d  = diff
6  f  = fetch
7  g  = grep
8  l  = log
9  m  = merge
10  o  = checkout
11  pl = pull
12  ps = push
13  s  = status
14  w  = whatchanged
15  cm = commit --message
16  co = checkout
17  cp = cherry-pick

設定ファイル

設定ファイルは3つあります。それぞれの設定ファイルの有効範囲は下記の通りです。

設定ファイル説明
.git/configリポジトリごとの設定
$HOME/.gitconfigユーザーごとの設定
/etc/gitconfigシステムごとの設定

基本的にエイリアスを設定する時は、$HOME/.gitconfigになると思います。

GitAlias

どのようなエイリアスを設定すればいいか悩んだ場合は、GitAliasを参考にするのがいいと思います。

GitHub - GitAlias/gitalias: Git alias commands for faster easier version control

GitHub - GitAlias/gitalias: Git alias commands for faster easier version control

Git alias commands for faster easier version control - GitAlias/gitalias

gitalias.txtというファイルに多くのエイリアスが設定されているので、~/.gitaliasとして保存して~/.gitconfigに下記を追加すれば全て使えるようになります。

1[include]
2path = ~/.gitalias

設定した内容

私の場合はGitAliasを全て使いこなせる自信がなかったので、使えそうなものを抜粋して設定しました。

1[alias]
2  #basic
3  a  = add
4  b  = branch
5  c  = commit
6  d  = diff
7  f  = fetch
8  g  = grep
9  l  = log
10  m  = merge
11  o  = checkout
12  pl = pull
13  ps = push
14  s  = status
15  w  = whatchanged
16  cm = commit --message
17  co = checkout
18  cp = cherry-pick
19
20  # log
21  ll = log --graph --topo-order --date=short --abbrev-commit --decorate --all --boundary --pretty=format:'%Cgreen%ad %Cred%h%Creset -%C(yellow)%d%Creset %s %Cblue[%cn]%Creset %Cblue%G?%Creset'
22
23  # reset commits
24  reset-commit            = reset --soft HEAD~1
25  reset-commit-hard       = reset --hard HEAD~1
26  reset-commit-hard-clean = !git reset --hard HEAD~1 && git clean -fd
27
28  # undo commits
29  undo-commit             = reset --soft HEAD~1
30  undo-commit-hard        = reset --hard HEAD~1
31  undo-commit-hard-clean  = !git reset --hard HEAD~1 && git clean -fd
32
33  # summary
34  log-of-count-and-format = "!f() { format=\"$1\"; shift; git log $@ --format=oneline --format="$format" | awk '{a[$0]++}END{for(i in a){print a[i], int((a[i]/NR)*100) \"%\", i}}' | sort -nr; }; f"
35  log-of-count-and-format-with-date = "!f() { format=\"$1\"; shift; date_format=\"$1\"; shift; git log $@ --format=oneline --format=\"$format\" --date=format:\"$date_format\" | awk '{a[$0]++}END{for(i in a){print a[i], int((a[i]/NR)*100) \"%\", i}}' | sort -nr; }; f"
36  log-of-count-and-email = "!f() { git log-of-count-and-format \"%aE\" $@; }; f"
37  log-of-count-and-day = "!f() { git log-of-count-and-format-with-date \"%ad\" \"%Y-%m-%d\" $@ ; }; f"
38  churn = !"f() { git log --all --find-copies --find-renames --name-only --format='format:' \"$@\" | awk 'NF{a[$0]++}END{for(i in a){print a[i], i}}' | sort -rn;};f"
39  summary = "!f() { \
40    printf \"Summary of this branch...\n\"; \
41    printf \"%s\n\" $(git rev-parse --abbrev-ref HEAD); \
42    printf \"%s first commit timestamp\n\" $(git log --date-order --format=%cI | tail -1); \
43    printf \"%s last commit timestamp\n\" $(git log -1 --date-order --format=%cI); \
44    printf \"\nSummary of counts...\n\"; \
45    printf \"%d commit count\n\" $(git rev-list --count HEAD); \
46    printf \"%d date count\n\" $(git log --format=oneline --format=\"%ad\" --date=format:\"%Y-%m-%d\" | awk '{a[$0]=1}END{for(i in a){n++;} print n}'); \
47    printf \"%d tag count\n\" $(git tag | wc -l); \
48    printf \"%d author count\n\" $(git log --format=oneline --format=\"%aE\" | awk '{a[$0]=1}END{for(i in a){n++;} print n}'); \
49    printf \"%d committer count\n\" $(git log --format=oneline --format=\"%cE\" | awk '{a[$0]=1}END{for(i in a){n++;} print n}'); \
50    printf \"%d local branch count\n\" $(git branch | grep -v \" -> \" | wc -l); \
51    printf \"%d remote branch count\n\" $(git branch -r | grep -v \" -> \" | wc -l); \
52    printf \"\nSummary of this directory...\n\"; \
53    printf \"%s\n\" $(pwd); \
54    printf \"%d file count via git ls-files\n\" $(git ls-files | wc -l); \
55    printf \"%d file count via find command\n\" $(find . | wc -l); \
56    printf \"%d disk usage\n\" $(du -s | awk '{print $1}'); \
57    printf \"\nMost-active authors, with commit count and %%...\n\"; git log-of-count-and-email | head -7; \
58    printf \"\nMost-active dates, with commit count and %%...\n\"; git log-of-count-and-day | head -7; \
59    printf \"\nMost-active files, with churn count\n\"; git churn | head -7; \
60  }; f"

また、gitと毎回打つのも面倒だったので、.zshrcには下記を追加しました。

1alias g=git

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee