個人的なメモ その2
その1は [2010-04-29-1] にあるよ。

Git では、たった一日の作業でもブランチを作ることが良くある。基本ブ
ランチは修正が終わったら master に merge して削除、つまり使い捨て。
別な作業が入ったら、master から新たにブランチを作る。

cvs とか svn だと、作業単位毎にディレクトリを掘って cvs checkout と
かしていたけど、Git はこれをブランチ操作のみでできる点が超便利。

ただ、他に違わず、ブランチ操作も複雑なのでメモメモ。

(1) ローカルブランチの確認

% git branch

(2) リモートブランチの確認

% git branch -r

(1) + (2)

% git branch -a

(3) ローカルブランチ bar の作成

% git branch bar

(4) ローカルブランチ bar への切り替え

% git checkout bar

(3) と (4) を同時にやる。

% git checkout -b bar

(5) 任意のタグやリビジョンを起点に、ブランチ bar を作る。

% git branch bar <タグ名 or リビジョン>

(6) (5) をやりつつ、bar ブランチに切り替える。

% git checkout -b bar <タグ名 or リビジョン>

(7) 修正の一時的な待避。<name> は省略可能。他のブランチに切り替えた
いんだけど、commit はしたくない(ブランチを切り替える時は commit す
る必要がある)という時に使う。個人的には、気分で圧縮コミットと使い分
けてる。

% git stash save <name>

(8) (5) のリスト表示

% git stash list
stash@{0}: On <branch name>: <name>

(9) (5) の取り出し

% git stash pop 'stash@{0}'

(10) ローカルブランチ bar の削除

% git branch -d bar

(11) (ローカルブランチの) master にマージしてないと (8) はエラーになる。
とにかく強制削除したい場合はこちら。

% git branch -D bar

(12) ローカルブランチ bar をリモートリポジトリ origin に新たに作成
する。origin というのは、clone 元のリモートリポジトリ。git config
–list で確認できる。

% git push origin bar

(13) リモートリポジトリ origin のブランチ bar を削除する

% git push origin :bar
or
% git push --delete origin bar	# maybe from version 1.7

(14) リモートリポジトリ origin のブランチ bar を削除しようとして、
こんなエラーが発生したら、、、

% git push origin :bar
error: unable to push to unqualified destination: bar
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'ssh://example.com/~masutaka/rep.git'

まずは現状把握。
古くなった(=stale)ブランチ refs/remotes/origin/bar が見つかった。
‘git remote prune’ 使えと言っている。

% git remote show origin
* remote origin
  Fetch URL: ssh://example.com/~masutaka/rep.git
  Push  URL: ssh://example.com/~masutaka/rep.git
  HEAD branch: master
  Remote branches:
    master                    tracked
    refs/remotes/origin/bar stale (use 'git remote prune' to remove)
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

使った。消せたようだ。‘git branch -a’ や ‘git remote show origin’
で確認してもうまく消せたことが分かる。

% git remote prune origin
Pruning origin
URL: ssh://example.com/~masutaka/rep.git
 * [pruned] origin/bar

(15) リモートリポジトリのブランチ foo を現在のブランチに pull する。

% git pull git://example.com/project.git foo

リモートリポジトリは git remote add で追加したリポジトリ名も指定で
きる。いやむしろそちらが正当なやり方か。

(16) リモートリポジトリ origin の ブランチ foo を、ローカルリポジト
リの tmp ブランチに pull する。

% git pull origin foo:tmp

(17) リモートリポジトリ origin の ブランチ foo を、ローカルリポジト
リの var として、そのまま持ってくる。

% git checkout -b var origin/foo

リモートリポジトリの名前が origin で、ローカルとリモートで同じブラ
ンチ名でよければ、以下のように省略可能。

% git checkout foo

(18) ローカルブランチ foo を var にリネームする。

% git branch -m foo var

(19) リモートリポジトリ foo に含まれているブランチを表示する。

% git remote show foo

(20) すべてのリモートリポジトリから変更を取得する。マージはしない。

% git fetch --all

ブランチの作成や切り替え、master へのマージは Emacs の git-dwim.el
がめちゃめちゃ便利。egg.el とともに愛用中。

参考情報:
clmemo@aka: Git remote repository と Branch
Gitでリモートの共有リポジトリにあるブランチを消す時のメモ - blog.longkey1.net
“git stash” のもう少し詳しい使い方
[Git] Git コマンドメモ - それはBlog
Gitを使った分散開発管理7 – ブランチとタグを使う – | .dev():クラスメソッド開発ブログ
Git ユーザマニュアル (バージョン 1.5.3 以降用)