Gitでローカル修正の入ったファイルをコミットさせない横着な方法

Gitでコミットさせないといえば.gitignoreですが、リポジトリに存在するファイルに対しては無力です。リポジトリ既存のファイルに手を入れたけどその修正は常にコミットしたくない、という状況での手間を省く方法を思いついたのでメモ。

何が不便だったか

例えばローカル作業がしやすいようにソースコードをおれおれカスタマイズすることがあります。当然そのファイルはコミットしてはならないので git add . などを気兼ねなく使うことができなくなります。そんな手間を解消する技はないかと調べてると、エイリアスでパイプが使えることを知りその応用でひとつの解決策を思いつきました。

git add .の代わりにadd + resetのエイリアスを使う

修正ファイルを一括ステージングする際に git add . に代わって下記エイリアスを叩くことでうまくいきました。ここではエイリアス名をaa、コミットしたくないファイルをhoge.txtとしています。
.git/config

[alias]
aa = !git add .|git reset HEAD hoge.txt

このエイリアスを叩くと、一度全ての修正ファイルをaddしてからhoge.txtだけステージから降ろすという処理になるので、何度叩いてもhoge.txtがコミット候補に上がることはありません。

ところがMacで問題が

しかし残念なことにこのエイリアスWindowsでは動いたんですがMacだと下記エラーになってしまいました。

fatal: Unable to create '/hoge/hoge/myproject/.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

しかしindex.lockは見つからないのでおそらくパイプの同期がうまくいってないとかそんな気がします。試しにパイプの真ん中に余計な処理を入れてみたら...うまくいってしまいました。

[alias]
aa = !git add .|echo ...|git reset HEAD hoge.txt

かっこわるすぎ。でも今日はもうこのへんで。


それにしてもgitって便利ですね。最初は難解だったけど一度その敷居を乗り越えると戻れない楽しさです。