日々常々

ふつうのプログラマがあたりまえにしたいこと。

brew upgrade の失敗ついでに git の親切なとこを

私はそうとうボケているらしく、 自分で「scalaもcheckoutしたまんまだわー」と書いておきながら、そのままupdateかましました。

$ brew update
error: Your local changes to the following files would be overwritten by merge:
	Library/Formula/scala.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

過去バージョンをインストールするためとかで手で git checkout xxx とかやったまま放置したらこれになるみたいです。

直さねばなるまい。

原因

前のエントリの通りで、特に悩む事でもないです。 /usr/local に移動して git status 叩いて、今回エラーになったファイルがこんな感じで出たら同じ事象

$ cd /usr/local
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   Library/Formula/scala.rb
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	Library/Formula/adamem.rb
#	Library/Formula/asterisk.rb
(略)

うん、戻そう。

対処

「前と同じ」だけじゃ芸がないので、ちょっとgitの取っ掛かり的な何かを書いてみる。
gitはstatus叩いた時に出てくるコマンドを叩けばとりあえずなんとかなります。「英語こわい」とか思うかもしれませんが、このメッセージ信じてるだけで何とかなることも多いです。見るのなんて括弧の中の use ... だけでいいですしね。

ここでは「 (use "git reset HEAD ..." to unstage)」を信じて叩きます。結果的には二度手間ですが、他に何も見なくても「git status」だけでわかるってのが重要。

$ git reset HEAD Library/Formula/scala.rb
Unstaged changes after reset:
M	Library/Formula/scala.rb

これで済んだ?いやいや。そう思うならもう一度 git status です。

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   Library/Formula/scala.rb
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	Library/Formula/adamem.rb
(略)

まだ残ってる。で、次は「(use "git checkout -- ..." to discard changes in working directory)」って言ってくれてますので、その通りに。

$ git checkout -- Library/Formula/scala.rb
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	Library/Formula/adamem.rb
(略)

これでいける。

$ brew update
Updated Homebrew from 5222ba75 to 7971d601.
==> New Formula
alac	  freetype  libpng    pan	root
==> Updated Formula
ace			      cpanminus			    ffmpeg2theora		  hwloc				pkg-config
ack			      cppcheck			    findbugs			  ical-buddy			play
(略)

めでたしめでたし。

Gitに不慣れな人は、困ったらとりあえず git status してみたらいいと思います。

おまけ

/user/local で gitk してみた。

最初の brew update が失敗したあと。

上の通りやったあと。