個人的なメモ その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 以降用)