brew updateで"error: Your local changes to the following files would be overwritten by merge"

brew updateしたら表題のエラーが出ました。

原因:/usr/local/ で謎の差分があった

Homebrewは"/usr/local" ディレクトリを丸ごとgit管理しており、ここでワーキングツリーに差分があるとgit pullできないためにbew updateが失敗してしまうようです。

具体的に私のケースでは、
$ cd /usr/local
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   Library/Formula/bison.rb
のような状況になっており、何故か"/usrl/local/Library/Formula/bison.rb"に未コミットの変更が加えられていました。
(自分でやったのかもしれないけど覚えてない)

解決方法

この未コミットの変更を退避させて最新版のorigin/masterに追従すればよいです。
$ cd /usr/local/
$ git stash save
$ git fetch
$ git merge --ff-only origin/master
ここまでうまく行けば、
brew update
が成功するはずです。
カテゴリ: