tl;dr

  • .gitconfigにもaliasの登録ができる
    • [alias]ブロックにaliasを登録する
  • tagsで単数・複数の悩みを解消する
  • discardで変更を取り消す
  • unstageでaddを取り消す
  • uncommitでcommitを取り消す
  • ignore.gitignoreを生成する

git aliases

この記事は今すぐalias登録すべきワンライナー by ゆめみ① Advent Calendar 2018 の6日目の穴埋め記事です。 こちらのアドベントカレンダーは今すぐalias登録べきワンライナーということで、みなさん.bashrc.zshrcのaliasについて記事を書いてらっしゃいますが、実は.gitconfigという、gitコマンドの設定を書いておくファイルにもaliasの指定ができます。 誰もshellのaliasとは言ってない!(・・・はず)ので、いくつか.gitconfig用に便利なaliasを紹介していきましょう

aliasの登録方法

.gitconfigは基本的にiniファイルです。そのため、次のように登録します。

1
2
3
[alias]
aliasname1 = some command 1st
aliasname2 = some command 2nd

簡単ですね? [alias]というブロックを作成し、alias名=コマンドの形で記述します。 このときコマンドはgit xxxの形で実行される、xxxの部分のみを指定します。

例えば、

1
2
[alias]
stat = git status

と指定すると実際の実行時にはgit git statusという形で実行されてしまいエラーになるので注意しましょう。 gitのつかないコマンドを実行したい場合は頭に!をつけます。

1
2
[alias]
ls = !ls

このように記載すると、git lslsが実行されます。

git tags

git tagというコマンドがありまして。まぁみなさんご存知でしょうが、tagの一覧を出したり、新しいtagを作ったりするコマンドです。これ単体では特に問題がないのですが、リモートリポジトリと合わせて使うと、ちょっと悩みが発生します。 git tagコマンドでタグをつけた後、リモートリポジトリにpushするときのコマンドはgit push --tagsです。これはtagをまとめてpushするので、複数形なんでしょう。しかしです。tagの一覧を出すときに使うのもgit tagと単数形なんですね。 ついついgit tagsと打ってしまいませんか?

そんなあなたはこんなaliasを登録しておきましょう

1
2
[alias]
tags = tag

地味ですが、これで単数形か複数形か悩まずに済みます。

git discard

ファイルを変更して、「あ、やっぱやーめた」、とそんなこと、ありませんか?そんなときにmagit を使っていればM-x magit-statusからのk、で一発ですが、さてコマンドでやるにはどうしたらいいんでしょうか? git resetgit checkout?なんにせよ少し悩んで場合によってはGoogle先生にお聞きする必要がありそうです。

そんなときに便利なのが次のalias。

1
2
[alias]
discard = checkout --

正解はgit checkoutですが、もっとわかりやすく、git discardとすれば悩む必要もないですね。

git unstage

普段はなにかしらのクライアントからgitを操作しているあなた。一度git addしたファイルをaddしていない状態に戻すコマンドをすぐに答えられますか?私はすぐには答えられません。確実にGoogleで検索 する自信があります。

そこで、こんなaliasを登録しておきます。

1
2
[alias]
unstage = reset -q HEAD --

これで間違ってaddしたファイルもgit unstage hogehogeと一発です。

git uncommit

さて、編集しただけだったり、addしただけならそんなに難しいことはありませんが、一旦commitした後はどうでしょうか。ヒントはresetを使うということですが、どのように指定をしたら良いかわかりますか? --mixedオプションを使う、が答えです。とはいえ、こんなのすぐには思い出せません。やりたいことはcommitを取り消したい、ですから。

こんなaliasが便利でしょう。

1
2
[alias]
uncommit = reset --mixed HEAD~

git uncommit。うん、わかりやすくなりました。

git ignore

最後はこれです。前にも一度紹介しましたが 、みなさんは.gitignoreをどのように作成していますか? 色々と方法はあると思いますが、私はgitignore.io が好きです。 しかし毎回ブラウザでアクセスしたり、URLをタイプするのは面倒です。

私は次のように設定しています。

1
2
[alias]
ignore = !curl -L -s https://www.gitignore.io/api/$@

これで、git ignoreコマンドが使えるようになり、git ignore macos > .gitignoreの形で簡単に.gitignoreのテンプレートを作れるようになりました。

なお、普段私が使っている.gitconfigGitHubで 公開しています。