gitで間違ってadd&commit&pushまでしてしまった時の対処方法

gitを使っていて、addしてcommitしてpushまでしてしまってから「しまった!」と気付いてcommitを無かったことにしたい場合があると思います。
この場合の対処方法をメモしておきます(要:gitサーバの管理権限)

まず、ローカルリポジトリの内容を取り消します。

$ git reset --hard HEAD^

–hardを用いることで、ローカルの変更内容が元に戻ります。変更内容を戻したくない場合は–softを使用しましょう。

で、この状態でgit logすると履歴が戻っているのが確認できますが、pushしようとすると

$ git push
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'hogehoge.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.

と言われてしまい、拒否されます。
このため、一旦サーバの内容を削除しちゃいます(笑)

$ git push origin :master
remote: warning: deleting the current branch To hogehoge.git - [deleted] master

もし、このコマンドに失敗する場合は、gitサーバ上の.gitconfigに次の設定を追加します。

[receive]
denyDeleteCurrent = warn

その後、再度pushします。

$ git push origin master
略
To hogehoge.git * [new branch] master -> master

以上です。
結構、危険なことをやってるので、慎重にやってください。

Macのアプリが利用しているフレームワークの調べ方

あるMacのアプリがどんなフレームワークを利用しているか調べたい時があると思います。
その場合は以下のようにすると、アプリが利用しているフレームワークが確認できます。

アプリが利用しているフレームワークの調べ方(例:iTunesの場合)

$ otool -L /Applications/iTunes.app/Contents/MacOS/iTunes

アプリのパッケージではなく、パッケージの中に含まれているプログラム本体を指定するのがコツです。

Yosemiteでosxfuseを起動しようとするとエラーが出た

YosemiteでHomebrewなどを使ってosxfuseをインストールしようとすると、インストールは成功しても、sshfsなどの起動時に以下のようなエラーが出てロードできません。

/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext failed to load – (libkern/kext) not loadable (reason unspecified); check the system/kernel logs for errors or try kextutil(8).
the OSXFUSE file system is not available (71)

ログを見ると以下のようなログも表示されます。

com.apple.kextd\[19\]: ERROR: invalid signature for com.github.osxfuse.filesystems.osxfusefs, will not load

どうも、Yosemiteからはカーネルエクステンション(Kernel EXTension)に開発者の署名が必要になったせいらしく、

$ sudo nvram boot-args="kext-dev-mode=1"

を実行して再起動するとOKみたいな記事を見かけますが、これだと今後怪しいドライバが勝手に組み込まれる恐れが出てきます。
ってことで、せっかくアップルがセキュリティーを向上させてくれているので、
ここは素直に osxfuse公式ホームページ からパッケージをダウンロードするのが得策だと私は思います。

追記:
HomebrewのCaskroomを使うと以下のようにosxfuseと一緒にsshfsまで簡単にインストールできます。

$ brew install Caskroom/cask/sshfs

mysqlのフルダンプファイルから特定のデータベースのみリストアする方法

mysqlのフルダンプしたファイルには全てのデーターベースの情報が含まれています。
cronなどで一定間隔でバックアップする際に便利ですが、開発中に一部のデーターベースの内容のみリストアしたい場合には困ると思います。

この場合は、一旦フルダンプファイルをcsplitを用いて、データベース単位で分割します。

$ csplit dump.sql /CREATE\ DATABASE/ {*}

これを実行すると、カレントディレクトリにデータベース単位にファイルが分割されますので、あとは目的のファイルをgrepなどで探して

$ mysql -u root -p データベース名 < ファイル名

などと実行すればOKです。