tohokuaikiのチラシの裏

技術的ネタとか。

Gitリモートのあれこれ

Gitでリモートにあるのは、たいていBareだと思う。共有の為の。

で、作業側でブランチによる開発が一段落したので、作業側でブランチをマージして共有側も同じようにmasterに戻したい場合。

とりあえず、マージしよう…と思いチェックアウトして自分の居るブランチを変えようと思ったのだけどできない。Bareのリポジトリの場合。

% git checkout《masterに戻る》
fatal: This operation must be run in a work tree

とすると、って怒られるので、

$ git symbolic-ref HEAD refs/heads/《Bareのブランチの名称》

と手で変えてやる。

すると、チェックアウトしたことになるのでブランチが削除できる。

さらに開発環境

んで、自分は別の所でもgit-cloneさせたのがあるので、そのリポジトリにリモート(Bare)のブランチがあって、そこもgit branch -a させるとリモートのブランチ一覧が出てしまう。

ま、気にしなければいいのだけど、同期させたい。その時は

$ git remote show origin

としてみる。

Remote branches:
master tracked
refs/remotes/origin/somebranch stale (use 'git remote prune' to remove)

となって、somebranchが無いことが分かった。

そこで

$ git remote prune -n origin

とすると削除してくれる。-nオプションはdry-run。


Ref:
Bareリポジトリのmasterブランチを削除する - yukimiの成長記
Gitでリモートの共有リポジトリにあるブランチを消す時のメ - a long log