railsを少しずつ勉強する - 1. 環境構築

railsを勉強するためにVMwareUbuntuを入れる所から、環境構築の手順をメモ。

注意

下記にあるソフト類のインストール手順はあくまでも、2012/6/27 現在の方法です。
同じような環境を作るときは、各ソフトの公式サイトのインストール方法なども確認すること。
特に、ruby周りのツールはバージョン変わると、インストール方法やオプションの指定が変わったりするので・・・

作る環境

使用したVMware Player: 4.0.4 build-744019

仮想マシン

VMwareUbuntuを入れる

上記のurlからVMware PlayerとUbuntuのCDイメージをダウンロードして、仮想マシンを作る。

VMwareは自動でOSをインストールしてくれる「簡易インストール設定」がある。
しかし、これでインストールすると言語設定が英語になってしまうため、手動でインストールする。

インストール手順

1. 新規仮想マシンの作成 をクリック
2. 「後でOSをインストール」にして、空の仮想マシンを作る。
3. 作成した仮想マシンの設定の「CD/DVD」のISOイメージでUbuntuのisoイメージを指定する。
4. 仮想マシンを再生させ、Ubuntuのインストールを行う。

gitのインストール

git関連のソフトをインストールする。

$ sudo apt-get install git gitk git-flow

git: git本体
gitk: gitのログをGUIで見られるツール
git-flow: git-flowはA successful Git branching modelというブランチモデルを補助するツール

git-flowの入力補完

git-flowの入力補完を行うgit-flow-completionが便利なので、インストールしておく。
これはapt-getでインストールできないため、手動でインストールする。

$ git clone git://github.com/bobthecow/git-flow-completion.git
$ mkdir ~/bash_completion.d
$ cp ./git-flow-completion/git-flow-completion.bash ~/bash_completion.d/

tips. Ubuntu 12.04でのターミナル起動方法

Ubuntu 12.04では、画面左側の「Dashホーム」の所で「terminal」と打つと端末のアイコンが出てくる。
よく使うので、画面左側のランチャー部分にD&Dでアイコンを置いておくと便利。

rvmのインストール

rubyではrubyのバージョン、各種ライブラリ(gem)のバージョンが複雑なので、rvmを入れて複数のruby/gemを管理できるようにしておく。

1. rvmをインストールする。

$ sudo apt-get install curl
$ curl -L https://get.rvm.io | bash -s stable

2. rvmに必要なライブラリなどをインストールする。

$ rvm requirements
(ruby: /usr/bin/apt-get install ... に記載されているライブラリを指定する。↓は1.14.3のもの)
$ sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

3. ruby 1.9.3をインストールする

$ rvm install 1.9.3

4. デフォルトで1.9.3を使用するようにする

$ rvm use 1.9.3 --default
注意1. Ubuntu 12.04では、エラーが出る。

ここを参考に、ターミナルの設定を変更する。
「プロファイル」→「タイトルとコマンド」→「ログインシェルとしてコマンドを実行する」にチェックを入れる

注意2. Ubuntu 12.04では、.bashrcが読み込まれなくなる

これを参考に、~/.bash_profile を作成する。

if [ -f "$HOME/.profile" ]; then
  . "$HOME/.profile"
fi

if [ -f "$HOME/.bash_login" ]; then
  . "$HOME/.bash_login"
fi

ターミナルを一度閉じてから、もう一度起動させると、rvmが使えるようになる。

$ rvm --version

rvm 1.14.3 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
railsをインストールする

gemコマンドでrailsをインストールする。

$ gem install rails
$ rails -v
Rails 3.2.6

Transifexで翻訳する時のやり方メモ

忘れそうなので、メモ。
web上でも編集できるけど、リソースがロックされるのでローカルで編集した方が楽。

参考ページなど

Transifex Clientのインストール

Pythonで作られているらしく、pipでインストールできます。

$ pip install transifex-client

Transifex Clientの基本的な使い方

TortoiseGitの日本語の翻訳を例に使う。

初期化

$ mkdir tortoisegit
$ cd tortoisegit
$ tx init

プロジェクトの設定

$ tx set --auto-remote https://www.transifex.net/projects/p/tortoisegit/
$ tx pull -l ja

翻訳してpushする

$ vi translations/ja.po
(編集)
$ tx push -t -l ja

実際の翻訳作業

ローカルの作業はgitでバージョン管理した方がいい。
上の例と同じく、TortoiseGitの日本語の翻訳を例を使う。

初期化(上の例と同じ)

$ mkdir tortoisegit
$ cd tortoisegit
$ tx init

プロジェクトの設定(上の例と同じ)

$ tx set --auto-remote https://www.transifex.net/projects/p/tortoisegit/
$ tx pull -l ja

gitリポジトリの初期化

$ git init
$ git commit --allow-empty -m "first commit"

.fx/を無視リストに追加

$ echo ".tx" > .gitignore
$ git add .gitignore
$ git commit -m "ignore .tx directory"

作業前のja.poをコミット

$ git add translations/ja.po
$ git commit -m "first ja.po"

自分の翻訳作業を始める

$ git checkout -b work master
$ vi
(編集)
$ git commit -m "1〜100行目くらいまで翻訳"

tx pushの前に他人の変更を取得・マージする

$ git checkout master
$ tx pull -f
(他人の変更があればコミットする。なければ何もしない)
$ git merge --no-ff work

マージ結果をpushする

$ tx push -t -l ja

ja.poのヘッダにあるPO-Revision-Dateがpush時に更新されるので手元を直す

$ tx pull -f
$ git add translations/ja.po
$ git commit -C HEAD

次の翻訳作業用にブランチを更新する

$ git branch -f work master

gitで現在の作業内容をクイックセーブする

見えないチカラ: 【翻訳】Gitをボトムアップから理解する
http://keijinsonyaban.blogspot.jp/2011/05/git.html

最後の方にstashの話が書かれていた。
以下、引用。

これはあなたのディレクトリの内容の全て――ワーキングツリーと、index の状態の両方を含む――を取り込み、それらのための blob を Git のリポジトリ中に作成する。tree はそれらの blob を保持し、そして stash コミットはワーキングツリーと index と、あなたが stash をした時の時刻を記録する。


これは良いプラクティスだ。なぜなら、次の日にあなたは git stash apply を使って stash から変更を戻すことになるが、毎日の終わりにはあなたが stash した全ての変更が reflog に存在するからだ。以下は、次の日の朝に作業をするために戻ってきたあと、あなたがやるはずのことだ (WIP はここでは "Work in progress=進行中" を表す):

作業途中の内容をstashに放り込んで、blobを作っておくのは便利そうなので、サブコマンドにしておいた

git-qsave

このファイルに実行権限をつけて、PATHの通っている所に置くと使えるようになる。
インデックスの内容を維持するようにしてあるので、気楽にqsaveできるようにしてある。

使い方

とりあえず、作業してて保存したくなったら $ git qsave しておく。

昔の変更を取り戻したくなったら、下のような方法で探す事ができる。

  • stash一覧から探す
$ git stash list
  • reflogから探す
$ git reflog show stash
  • 詳しくログやコミット内容を見てみる
$ git log stash@{32} # これはいつやった?
$ git show stash@{32} # これはどんな内容?
  • 探したコミットからブランチを作る
$ git branch restore_stash32 stash@{32}


gitに慣れてなくて、コミット回数が少ない人は1日の終わりにとりあえずqsaveするようにしてみたら便利かも。

今までソフトウェア開発について勉強してきたことのふりかえり

[twitter:@kyon_mm]さんの記事(僕がソフトウェア開発を勉強し始めて3年間でやったこと)を読んでいて、「今までのふりかえりかー。面白いかも」とか思ったので、ブログ書いてみた。
期間は就職(2008年4月)〜現在(2012年5月)の4年間。

1年目(2008年4月〜2009年3月)

SIerな会社に入社。
会社の研修でJavaを習った後、会社の技術書棚にあった「Java言語で学ぶデザインパターン入門」を借りた。
たぶん、講義・研修・仕事に関係なく自分で読んだ技術書はコレが初めてだと思う。


ここでデザパタを覚えてから、オブジェクト指向アジャイル開発に興味を持ち始めました。

読んでた書籍

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

やさしいJava 第4版

やさしいJava 第4版

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

2年目(2009年4月〜2010年3月)

この時期はバージョン管理とチケット駆動開発を勉強し始めてました。
Trac Lightningを自宅のPCにインストールしたり、TortoiseSVNの使い方を勉強してました。
勉強の時に、[twitter:@kaorun55]さんのかおるんダイアリーや[twitter:@kanu_]さんのalmost nearly deadにすごく助けられました。


あと、セミナー・勉強会にもプライベートで参加し始めたのもこの頃です。
最初に参加したのが、「アジャイルジャパン 2009」で、次が「デザインパターン再入門勉強会 : ATND
そこから、shibuya.tracjava-ja、pyspa とかのコミュニティの勉強会にも参加したり。


ただ、勉強していくうちに、会社のExcel仕様書を編集するだけのお仕事に不満を感じ始め、2010年1月頃に転職の事も少し考えるようになりました。

読んでた書籍

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座

Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド

Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発 (Be agile!)

継続的インテグレーション入門

継続的インテグレーション入門

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

3年目(2010年4月〜2010年7月) SIer時代の最後

仕事で新しい案件にテスター要員としてアサインされました。
この案件が色々と突っ込み所が多く

  • バージョン管理なし*1
  • バグ票手書き(紙管理)
  • テストは全て手動
  • 残業時間は調整するもの


すぐにでも転職しないと危ない」と思い、積極的に転職先を探すようになりました。

読んでた書籍

なれる!SE 2週間でわかる?SE入門 (電撃文庫)

なれる!SE 2週間でわかる?SE入門 (電撃文庫)

3年目(2010年7月〜2011年11月) C++ 組み込み系

転職先を探している頃に、[twitter:@kaorun55]さんからお誘い頂いて転職しました。
で、色々あってフリーランスになりました。


転職してから一番始めに嬉しかったのは、Trac + Subversion + Jenkins(Hudson) の環境が普通に構築されていた事。
あと、勉強会で話すような話題が職場で普通に話せる/話されるのも嬉しかった。


この時期ぐらいから勉強会に参加するだけじゃなくて、下手だけど発表してみたりするようになった。

読んでた書籍

IT業界を楽しく生き抜くための「つまみぐい勉強法」 (技評SE選書)

IT業界を楽しく生き抜くための「つまみぐい勉強法」 (技評SE選書)

入門Git

入門Git

3年目(2011年10月〜2012年1月) Python Web系(?)

この時期に[twitter:@tosikawa]さんとペアプロしたり、Gitを教わったりしていた。
というか、[twitter:@tosikawa]さんに教わった事を挙げるとキリがない。
パッと思いつく限り挙げてもTDD、アジャイル開発、PythonTrac・・・etc。


あと、この頃からUbuntuvim使ってコーディングするようになった。
これまではWindowsTerapadサクラエディタでした。

読んでた書籍

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

4年目(2011年2月〜2012年3月) Ruby ソーシャルアプリ系

Railsでソーシャルアプリを作ってました。
この1年の事を細かく書いてたら終わらなくなるので、箇条書きで簡単に列挙。


それと、[twitter:@LightningX]さん、[twitter:@tosikawa]さんに声掛けて頂き、一緒にSoftware DesignでGitの記事を書きました。
雑誌の記事を書くなんて初めてで、すごく勉強になりました。

読んでた書籍

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

NoSQLデータベースファーストガイド

NoSQLデータベースファーストガイド

クラウド セキュリティ&プライバシー ―リスクとコンプライアンスに対する企業の視点 (THEORY/IN/PRACTICE)

クラウド セキュリティ&プライバシー ―リスクとコンプライアンスに対する企業の視点 (THEORY/IN/PRACTICE)

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−

入門Mercurial Linux/Windows対応

入門Mercurial Linux/Windows対応

まとめ

他の人の参考になるか分からないですが、私はこんな順序で勉強してました。
ふりかえってみて思ったけど、自分の記憶が曖昧だったり、勉強してきたことを思い出せたり・・・と結構面白かった。
毎年、ふりかえりしてみても面白いかも。


そして、ふりかえりを書き出してみると途中の「隣の人に教えてもらいました」がチートっぽいですね。
[twitter:@tosikawa]さんと仕事し始めてから、技術以外でも仕事での考え方とか、なんかもう色々凄くて、日々の仕事が大きなインプットになりました。というか、今もなってます。
[twitter:@kyon_mm]さんが[twitter:@bleis]さんを知って・・・と同じように、私の場合は[twitter:@tosikawa]さんと仕事してから大きく変わりました。
情熱プログラマにも「師匠を探す」とありますし、目標とする人がいるのは勉強する上で大事な事かも。


最後に、ブログ書き終わってから改めて思ったけど、[twitter:@kyon_mm]さんの書籍数や勉強量は凄い!

最後に

今までに読み始めたけど、最後まで読み終わっていない書籍達
少しずつ消化中ですが・・・

達人プログラマー―システム開発の職人から名匠への道

達人プログラマー―システム開発の職人から名匠への道

  • 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/11
  • メディア: 単行本
  • 購入: 42人 クリック: 1,099回
  • この商品を含むブログ (347件) を見る
情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

ノンデザイナーズ・デザインブック [フルカラー新装増補版]

ノンデザイナーズ・デザインブック [フルカラー新装増補版]

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

アナリシスパターン―再利用可能なオブジェクトモデル (Object Technology Series)

アナリシスパターン―再利用可能なオブジェクトモデル (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,堀内一,友野晶夫,児玉公信,大脇文雄
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/04
  • メディア: 単行本
  • 購入: 7人 クリック: 89回
  • この商品を含むブログ (70件) を見る
テスト駆動開発入門

テスト駆動開発入門

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (312件) を見る
SOLID CODE 高品質なコードを生み出す実践的開発手法

SOLID CODE 高品質なコードを生み出す実践的開発手法

ビューティフルコード (THEORY/IN/PRACTICE)

ビューティフルコード (THEORY/IN/PRACTICE)

エキスパートPythonプログラミング

エキスパートPythonプログラミング

プログラマが知るべき97のこと

プログラマが知るべき97のこと

改訂新版 反復学習ソフト付き SQL書き方ドリル (WEB+DB PRESS plusシリーズ)

改訂新版 反復学習ソフト付き SQL書き方ドリル (WEB+DB PRESS plusシリーズ)

集合知プログラミング

集合知プログラミング

デコンパイリングJava ―逆解析技術とコードの難読化 (Art Of Reversing)

デコンパイリングJava ―逆解析技術とコードの難読化 (Art Of Reversing)

*1:「担当者が自由にprefix/suffixをつけて、任意でバックアップを残す = 管理されていない」と判断しました

*2:もう少し早かったかも

msysgit v1.7.10 のインストールと日本語入力の暫定対応

先日、msysgit v1.7.10がリリースされたので、インストールしてみました。

インストール

msysgit のページの Downloads から「Git-1.7.10-preview20120409.exe」をダウンロードする。
インストールは基本的にnext押すだけですが、PATH の設定と core.autocrlf だけ少し説明を書きました。

PATH の設定


BashでGitが使えればいいので、「Use Git Bash only」を選択。
ちなみに、それぞれの設定の意味は下記の通り。

Use Git Bash only
BashでGitを使う
Run Git from the Windows Command Prompt
GitがPATHに追加され、コマンドプロンプトでもGitが使えるようになる。
Run Git and included Unix tools from the Windows Command Prompt
GitとUnixのツールがPATHに追加される。ただし、Windowsのfind.exeやsort.exeが上書きされるので注意。

core.autocrlf の設定


Gitによる改行コードの自動変換は特に必要ないので、「Checkout as-is, commit as-is」を選択。
ちなみに、それぞれの設定の意味は下記の通り。

Checkout Windows-style, commit Unix-style line endings
チェックアウトするとに変換し、コミットする時にに変換する。
Checkout as-is, commit Unix-style line endings
チェックアウト時は変換せず、コミット時のみに変換する
Checkout as-is, commit as-is
チェックアウト時、コミット時も改行コードを変換しない

詳しくはPro Git - Pro Git 7.1 Git のカスタマイズ Git の設定 core.autocrlf を参照。

ショートカットの設定


デスクトップのショートカットを右クリックし、画像のように「簡易編集モード」にチェックを入れる。

日本語の表示の設定(bash)

C:\Program Files\Git\etc\profile の最後に下記を追加する。

alias ls='ls --color=auto --show-control-chars'

lsで日本語ファイル名が表示されるようになります。
--colorの設定はお好みで。

日本語の表示の設定(git)

下記のコマンドを実行する

$ git config --global core.quotepath false

git statusやgit logで日本語ファイル名が表示されるようになります。

日本語の入力の設定

C:\Program Files\Git\etc\input の"# disable/enable 8bit input"以下を下記のように修正する

# disable/enable 8bit input
input-meta on
output-meta on
convert-meta off

本来は上記の設定だけで日本語が入力できるようになるのですが、v1.7.10では文字化けするようです。

日本語の入力の暫定対応

nkfを使い、gitの引数をutf-8にするラッパーを作ります。
nkf.exe nkf32.dll Windows用 をダウンロードし、nkf.exe と 下記のgit_wrapper.sh を C:\Program Files\Git\bin\ に置く。

C:\Program Files\Git\etc\profile の最後に下記を追加する。

alias git=git_wrapper.sh

日本語の表示は文字化けしたままですが、内部的にはutf-8に変換されて、addやcommitが出来るようになります。

ただ、特にコマンドでの操作にこだわりがないのなら、ファイルの追加は右クリックからGit Addを選んだ方が楽です。
どちらからと言えば、日本語ファイルよりもgit commit -m やgit log --grep などで日本語を使いたい時のためのラッパーです。

初期設定

gitを使い始める前に初期設定をします。

$ git config --global user.name "sinsoku"
$ git config --global user.email "sinsoku.listy[at]gmail.com"
$ git config --global color.ui auto
$ git config --global core.edit vim

エディタは 基本的にvim utf-8で保存できるエディタを設定する。

あまり知られていないGitのTips

思い浮かんだGitのTipsを列挙してみました。

gitのコマンドをで補完する

git-completion.bash を入れると、でコマンドの補完が効くようになります。
また、PS1の設定を行うと現在のブランチ名が常にbash上に表示されるようになります。
Windowsの場合、msysgit は標準で入ってます)

インストール方法(引用)

# To use these routines:
#
# 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
# 2) Add the following line to your .bashrc/.zshrc:
# source ~/.git-completion.sh
#
# 3) Consider changing your PS1 to also show the current branch:
# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
# ZSH: PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
#
# The argument to __git_ps1 will be displayed only if you
# are currently in a git repository. The %s token will be
# the name of the current branch.

詳しくはググッて下さい。

設定をすると、画像のように補完が効いたり、現在のブランチ名が表示されるようになります。

自分の環境でのみ特定のファイルを無視する

$ touch ~/.gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global

自分の環境で常に無視したいファイル(vimで作られる.swpなど)は~/.gitignore_global で管理するといい。
このignore設定は他のユーザと共有されません。

あるリポジトリでのみ、特定のファイルを無視する

無視したいファイルをプロジェクト全体で共有したくない場合、/.git/info/exclude で管理する事もできます。
このignore設定も前述した.gitignore_globalと同様に他のユーザと共有されません。

日本語のファイル名を表示する

$ git config --global core.quotepath false


タグをpushする

$ git push origin <タグ名>

git push --tags は意図しないタグまでpushする可能性があるので、無闇に使わない方がいい。

git logでブランチとタグをグラフにして見る

$ git log --oneline --decorate --graph


一つ前のコミットを同じコミットメッセージのまま修正する

$ git commit --amend -C HEAD

-C は指定のコミットのログメッセージ、authorを使いまわす。
--amend を使う場合は前のコミットを少し直す事が多いので、ログメッセージが同じで問題なければ"-C HEAD"にすると入力の手間が省けます。

リモートのブランチ(feature/foobar)を削除する

$ git push origin :feature/foobar

少し分かりづらいので、メモとして。

リモートのタグ(v1.0.0)を削除する

$ git push origin :v1.0.0

ブランチと同じだけど、メモとして。

リモートリポジトリで削除されたブランチをfetchと同時にローカルでも削除する

$ git featch --prune origin

同様のことをgit remoteコマンドでも出来ます

$ git remote prune origin

削除されるのはリモート追跡ブランチ(origin/feature/foobar)で、追跡ブランチ(feature/foobar)は削除されません。
gitでは他人がリモートリポジトリのブランチを消しても、リモート追跡ブランチは自動的に消えません

ブランチの参照の履歴をみる

$ git reflog show master

同様のことをgit logコマンドのオプションでもできます。

$ git log -g --oneline master

昨日のmasterから、今日のmasterまでの変更を表示する

$ git log master@{yesterday}..master

昨日のmasterが参照していたコミットオブジェクトから、現在のmasterまでのログを表示する。
詳しくは「入門Git p.284」を読めば分かる。

masterのログで、昨日以降に作られたログを表示する

$ git log --since=yesterday master

こちらは、コミットオブジェクトの日時が昨日以降のログを表示する。
詳しくは「入門Git p.284」を読めば分かる。

fetchのときにリモートのタグをorigin/にリネームする

$ git fetch -n origin refs/heads/*:refs/remotes/origin/* refs/tags/*:refs/tags/origin/*

ローカルのタグとリモートのタグを分けたい場合に使うと便利です。

$ git tag | grep -v "origin"

のようにして、ローカルのタグだけ表示させたりも出来ます。

mergeコミット(develop~3)をrevertする

$ git revert develop~3 -m 2

マージコミットをrevertする場合、親を番号で指定する必要があります。
事前にlogコマンドで対象を確認した方がいい。

$ git log -n 1 develop~3^2

アノテーションタグを使う

$ git tag -a v1.0.0 master

-a オプションを使うと、タグメッセージとタグを打った人・打った日時を残す事が出来ます。

直近のタグを調べる

$ git describe

現在のブランチからログを辿り、最初に見つけたアノテーションタグを表示します。

軽量タグも含めて検索する場合、"--tags"のオプションを指定する必要があります。

現在いるブランチをリモートにpushする

$ git push origin HEAD

pushの時にブランチ名を入力せずにpush出来て便利。*1
HEADがブランチでない場合はエラーになります。

普通のやり方は下記の通り。

$ git push origin <現在いるブランチ名>

直前にいたブランチを指定する

$ git checkout -

これはトピックブランチで作業が終わった後などに使うと便利。

$ git checkout master
$ git merge -

ブランチのを指定する

$ git checkout develop@{0}

rebase を多用する人向けです。

その他のTips

見えないチカラ: 【翻訳】あなたの知らないGit Tips に便利なTipsがあるので、こちらも参考に。
このTipsに書かれているものは省略してあります。

参考資料 - Web

Pro Git

SCMBootCamp のGit入門資料

参考資料 - 書籍

入門Git

入門Git

*1:私はgit config --global alias.psh "push -u origin HEAD"を設定しています