Git作業の効率化!gitconfigのaliasとzshrcのおすすめ設定
Git操作は前職がコマンドで完結させる会社だったため、今もプライベート含め開発時は基本的にSourceTreeのようなGUIツールを使わずにgit
コマンドかtig
を使っています。
そんな時に一々git checkout ~~
のように入力するのは手間なのでgitconfig
にaliasを、ものによってはzshrc
にaliasを設定して効率化しています。
gitのaliasを設定する方法については以下の記事を参照して下さい
【初心者でもOK!】gitコマンドのaliasを設定して楽をする方法 | Yuuの悠々自適Blog
gitconfigのalias
以下が私めの~/.gitconfig
のalias部分になります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[alias] st = status -sb ch = checkout br = branch bra = branch -a -vv ls = ls-files cm = commit -m sh = stash cp = cherry-pick l = log --graph --date=short --pretty=\"format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset\" la = log --oneline --decorate --graph --branches --tags --remotes see = browse save = stash save -u # 現在いるブランチのPull Requestを確認する pr = !hub browse -- pull/$(git symbolic-ref --short HEAD) # 自分が作った全てのPull Requestを開く list = !hub browse -- pulls/$(git config user.name) # git config に設定されているaliasを一覧表示する # 参考: https://qiita.com/sgr-ksmt/items/1cd9597eacc20121a5b0 aliases = !git config --get-regexp alias | sed 's/^alias.//g' | sed 's/ / = /1' |
色々な人の記事を参考にしながら自分なりアレンジをしこのような状態になっています。
私の上記の設定のうちsee
・pr
・list
を再現するためにはhub
コマンドが使える必要があるため、未インストールの人はHomebrewなどを使って導入してから使って下さい。
hub
コマンドの導入には以下の記事が参考になりそう
Github hubコマンドを使ってみる - Qiita
いくつかこだわっていたり気に入っているものをご紹介
git bra
bra = branch -a -vv
追跡ブランチも含めて全てのブランチを表示。
以前何かの記事では-vvv
となっていた気がしてそういう風に設定したんですが、違いが分からないので-vv
に。
git l・git la
l = log --graph --date=short --pretty=\"format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset\"
la = log --oneline --decorate --graph --branches --tags --remotes
ログを見るためのもの。
tig
使っている人には伝わるかもというところで書くと、
git l
とgit la
はtig
とtig --all
の関係です。
後に紹介するzshrcにgit la
をgg
というaliasとして登録しているのですが、私はしょっちゅうログの確認をするので使用頻度はかなり高いです。
前職ではリリース作業の際に、ローカルでゴニョゴニョしてからGitHubに上げてうんぬん。
という流れが多く、その際にログの確認大切!と思ってからgit la
を使うようになりました。
ログ見ながら作業をすると今自分が何をしていてどのコミットにいるか分かりやすいので、
今はrebase
・rebase -i
・cherry-pick
などどんなコマンドでもgit la
を挟んで確認するようにしています。
git see(hub see)
see = browse
hub browse
でGitHubの該当するリポジトリのページが見られますが、browse
がとにかく打ちづらい・・
という事で登録しています。
今browse
とタイプして2回ぐらい間違えそうになりました、危険
git save
save = stash save -u
これは git save "stashのメッセージ"
とする事で未追跡(untracked)のファイルも一緒にstashしつつ、stashのメッセージを付けられます。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 現在のstatusを確認(abc.mdという未追跡ファイルがある) $ git st ## develop...origin/develop ?? abc.md # 未追跡のファイルも含め、メッセージを付けつつstashする $ git save "未追跡のabc.mdをstashする" Saved working directory and index state On develop: 未追跡のabc.mdをstashする # stashの確認 $ git stash list stash@{0}: On develop: 未追跡のabc.mdをstashする |
「untrackedも含めてstashしたいんだけどどうやるんだっけ?」となる事が多く、前職の先輩がこの設定をしていたのでありがたくマネさせてもらいました。
git aliases
aliases = !git config --get-regexp alias | sed 's/^alias.//g' | sed 's/ / = /1'
コメントアウトしている参考ページほぼまんまです。笑
あまり使わないgitのaliasは忘れてしまう事が多いため、
(特にgit pr(hub pr)
・git list(hub list)
)
このコマンドを使って思い出せるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ git aliases st = status -sb ch = checkout br = branch bra = branch -a -vvv ls = ls-files cm = commit -m sh = stash cp = cherry-pick l = log --graph --date=short --pretty="format:%C(yellow)%h %C(cyan)%ad %C(green)%an%Creset%x09%s %C(red)%d%Creset" la = log --oneline --decorate --graph --branches --tags --remotes see = browse save = stash save -u pr = !hub browse -- pull/$(git symbolic-ref --short HEAD) list = !hub browse -- pulls/$(git config user.name) aliases = !git config --get-regexp alias | sed 's/^alias.//g' | sed 's/ / = /1' |
忘れやすいalias以外も含め内容の確認が出来るのでありがたいです。
zshrcのalias
続いて~/.zshrc
のgit関係のalias設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# git alias g="git" alias gl="git l" alias gla="git la" alias gg="git la" alias ge="gg --color | emojify | less -r" alias push="git push origin HEAD" alias pull="git fetch -p && git pull" # indexにaddしていないファイルを全て元に戻す alias wipe="git checkout . && git clean -fd" # tig alias t="tig" alias ta="tig --all" |
zshrcに設定する事で例えばgit pull
をpull
だけに出来たり、そもそもgit
というコマンド自体をg
と短縮する事も出来ます。
こちらでもいくつかご紹介
g
alias g="git"
これは設定されてる人結構いるのかな、というイメージ。
git st
=>g st
git ch .
=>g ch .
のようにgit
というコマンド自体を短縮する事が出来ます。
「git
て打つのめんどさい!」という人はぜひ。笑
これだけでも意外と時短になるので。
gg
alias gg="git la"
個人的に1番気に入ってるのがコレ。
gg
の上に設定してるgl="git l"
やgla="git la"
は意味伝わるかと思いますが、gg
て意味不明ですよねw
ログの確認を頻繁にする人間なので「g」を2回入力してすぐ確認出来るようにしています。
さっき貼った画像と同じですが、以下のような確認がすぐ出来るのはかなり助かります(自分的に)
tig --all
より表示速度が速く、使用頻度はかなり高めです。
(前述したように色々なコマンドの合間合間に挟んで使ってます)
ge
alias ge="gg --color | emojify | less -r"
絵文字コミットにハマっていた際によく使用していたのがコレ。
絵文字を表示しつつ、ログを確認できます。
emojify
が必要になるので注意
mrowa44/emojify: Emoji on the command line
push
alias push="git push origin HEAD"
現在のブランチをpushします。そのまんまですね。笑
取り上げた理由としては--force-with-lease
の事を軽く書きたいなと思ったからです。
これも会社の先輩に教わった事なんですが、私は普段pushする際に--force
ではなく--force-with-lease
という、pushするブランチが最後にfetchしたタイミングとリモートが違う状態の場合pushに失敗するオプションを使っています。
--force
ではなく--force-with-lease
を推奨する人も多いイメージなので、
以下のようなaliasを設定している人も多いかなと思うのですが、
1 |
alias push-f="git push --force-with-lease origin HEAD" |
ここのオプションはきちんと選択したいな、と思ってるので(怖いからw)いつも以下のように打っています。
1 |
$ push --force-with-lease |
若干面倒ではあるのですが、「zsh-autosuggestions」というのを使用しているのでそこまで手間なく出来ています。
zsh-users/zsh-autosuggestions: Fish-like autosuggestions for zsh
pull
alias pull="git fetch -p && git pull"
これは前職の先輩がgit pull
をする際にこのように設定していたためaliasとして登録しました。
git fetch -p
はpruneオプションを指定する事でリモートで削除されているブランチをローカルの追跡ブランチからも削除してくれる、
その後にgit pull
で追跡ブランチの状態を最新にしています。
以下のようにすれば prune をgit fetch
・git pull
をする際のデフォルトに出来るのですが、
1 |
git config --global fetch.prune true |
git fetch
のタイミングで以下のような事もあり得るのでは...とチキン過ぎて踏み出せない^^;
git fetch に、 --prune がオプションなのは何故? - スタック・オーバーフロー
wipe
alias wipe="git checkout . && git clean -fd"
indexにaddしていないファイルを全てなかった事にします。
色々実験的に試した後addしたファイル以外全部なかった事にしたい、と思う事が結構あったため登録したコマンド。
中途半端な感じですが意外と使う機会があるんです。(自分だけ??w)
しかし、wipe
ていう名前はセンスのなさが...うーむ、いい名前がないか悩み中です。笑
これを導入した1番の理由がgit clean -fd
が覚えられなくて、毎回git clean
のヘルプを見ないといけないめんどい!から始まっています。
t・ta
alias t="tig"
・alias ta="tig --all"
tig
関係のコマンド、git
のg
と同じで1文字で使えるように出来るので便利です。
あとがき
皆さんのaliasに少しでも貢献出来るといいな、と思いつつ書いたのですがいかがでしょう?
人によりけりなところもあるとは思いますが、きっと使いやすいものもあるはず..!!
余談
aliasを設定した時のデメリットとして
- 他の人の環境を触った時にそのクセが出てしまう
- その場合にaliasがない状況でもある程度実行できないといけない
という事があります。
僕はデザイナーさんのhelpで入る立場だった事があり、良くt
と打ってcommand not found
てなり「恥ずかしい...///」となる場面が多々ありました。笑