7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ちょっとした工夫で効率化!02【PR】パソナテックAdvent Calendar 2020

Day 19

git aliasを活用してgitを爆速で操作する

Last updated at Posted at 2018-07-03

git configコマンドでaliasを設定

git config --global alias.co checkout

このようにcheckoutcoというエイリアスを設定すると、git co masterと打つだけでgit checkout masterと同等に打つのと同等になります。
git co -b hogeのようにエイリアスに続けて追加で複数のオプションや値を渡すこともできます。

なお、オプション付きのエイリアスを設定する場合は下記のように''""でクオートしてあげる必要があります。

git config --global alias.pf 'push -f'
git config --global alias.aa 'commit --amend -a --no-edit'

律儀にgit checkout masterとカタカタとタイプしている人を見ると、エイリアス設定しようよ!と言いたくていつもムズムズしちゃいます。

git config --global alias.cm 'checkout master'

このようにエイリアスを設定すればgit cmターーン!!!(ドヤ顔)でオッケー。

~/.gitconfigを直接編集してaliasを設定

git config --globalで設定した項目は、ホームディレクトリ配下の~/.gitconfigファイルに保存されます。git configコマンドでちまちま設定しなくても、このファイルを直接編集してもオッケーです。[alias]の行に続く部分が文字通りエイリアスの設定です。


下記が僕のaliasの設定です。
これをコピペして、思うままにカスタマイズして使っていただけると幸いです。

[alias]
	a = add
	b = branch
	c = commit
	d = diff
	f = fetch
	g = reflog
	l = log
	m = merge
	p = pull
	r = rebase
	s = stash
	t = tag
	w = show
	aa = commit --amend -a --no-edit
	bd = branch -D
	bl = branch -a
	cm = checkout master
	co = checkout
	cp = cherry-pick
	df = difftool
	du = difftool @{upstream}
	mm = merge origin/master
	pf = push -f
	re = reset --soft HEAD~
	rh = reset --hard
	ri = rebase -i
	rs = reset --soft
	sl = stash list
	st = status
	su = submodule update
	pop = stash pop
	wip = commit -a -m \"[ci skip] WIP WIP WIP WIP WIP\"
	amend = commit --amend --no-edit
	shallow = clone --depth 1

これらの中から僕がよく使う超絶オススメ必殺エイリアスを紹介していきます。

お勧めalias

git aa 直前のコミットにブッコムやーつ

git config --global alias.aa 'commit --amend -a --no-edit'

これは、コミットされていない状態の全て差分を、直前(最新)のコミットにぶっこむコマンドのエイリアスです。
commit--amendオプションを付けると、新たにコミットを追加するのではなく、直前のコミットを修正するような動作になります。
-aオプションを付けるとgit addstageに追加していない修正もコミットの対象になります。git add .を省略できるイメージです。
最後に--no-editを付けることでコミットのタイトル・メッセージを編集するステップを省いています。
直前のコミットに修正漏れがあったような場合に、「追加の修正」のようなコミットを付け足すのは超絶イケてないので、今日からはgit aaを使いましょう!

git wip とりまコミットしとくやーつ

git config --global alias.wip 'commit -a -m "[ci skip] WIP WIP WIP WIP WIP"'

これは、コミットされていない状態の全て差分を、サクッと一発でコミットするコマンドのエイリアスです。
[ci skip]をコミットタイトルに含めることで、無駄にCIを回さないようにするオモイヤリもある奥ゆかしいエリアスです。
作業を中断しなければならない場合などに咄嗟にgit stashを使うと、stashの闇の中で修正が迷子になってしまうので、git stashではなくgit wipしておくと良いです。

git re コミットを取り消すやーつ

git config --global alias.re = 'reset --soft HEAD~'

これは、直前(最新)のコミットを取り消して、その差分をstageに戻すコマンドのエイリアスです。
一度コミットをバラして整理しながらcommitし直したい時に使います。
git reを連打すればどんどんcommitを取り消して行けるので便利ですが、branchを切った点より行き過ぎてしまうと困ったことになるので注意しましょう。

TL;DR

僕はgit wipgit aaでとりあえず修正を1つのコミットにまとめていって、PRを出す直前にgit reでコミットを取り消して、整理しながらコミットをまとめ直すようにしています。

ソースコードはすごく丁寧で綺麗にコーディングされているのに、gitの履歴(コミットログ)には無頓着になされている人のPRをみると、ちょっと残念というかもったいないなーと思ってしまいます。
gitの履歴を綺麗に保つことは自分にとっても、レビューアにとっても、あとあと履歴を追ってバグの原因探しをする羽目になる人のためにも、とても大切なことだと思います。

ソースコードだけでなく、gitの履歴も綺麗にするように気を使っているエンジニアがもっと増えて欲しいなと思ってます!

7
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?