LoginSignup
22
22

More than 5 years have passed since last update.

Git でリモートのいらないブランチとタグを丸ごと消し去る

Posted at

例えば GitHub でそれなりに大きなリポジトリを Fork して master のコードをちょちょっと弄りたいとします。

Fork で元のリポジトリのすべてのブランチとタグがコピーされますが、私が欲しいのは master だけでそれ以外のブランチもタグも必要ありません。

Clone する

GitHub で Fork したリポジトリを clone します。私はいわゆる PHPer なので php-src の Fork を使います。

$ git clone git@github.com:ngyuki/php-src.git -b master --single-branch

master 以外は要らないので -b master --single-branch で master だけ clone します。

この時点でローカルブランチは master しかありません。

$ git branch
* master

タグは master ブランチまでの経路上にあるものが clone のときに付いてきます。

$ git tag
NEWS
php-5.3.23RC1
php-5.4.4RC2

リモートのブランチを消し去る

git push --prune <remote> <refspec>:<refspec> で、ローカルに存在しないリモートのブランチを消し去ります。

$ git push --prune origin "refs/heads/*:refs/heads/*"

--prune は、ローカルにあってリモートに存在しないブランチを削除するオプションです。

<refspec>:<refspec><local>:<remote> の形式です、ローカルの refs/heads/* をリモートの refs/heads/* に push する、という意味です。

refspec の代わりに --mirror を指定しても概ね同じですが、--mirror だと refs/remotes/origin/* まで push されてしまって不都合です。

リモートのタグを消し去る

次はタグを消し去ります。

master にくっついて幾つかのタグがローカルに作られているので、ブランチを消したときと同じ手順だとそれらのタグが残ってしまいます。

なので、存在しない ref を指定してリモートのタグをすべて消し去ります。

$ git push --prune origin "refs/dummy/*:refs/tags/*"

ローカルのタグはそのまま残っているので、git fetch --prune --tags で消し去ります。

$ git fetch --prune --tags origin

タグを消し去る(別の方法)

ローカルのタグをすべて消してから git push --prune --tags の方が手っ取り早いかもしれません。

$ git tag | xargs git tag -d
$ git push --prune --tags origin

--tags は次のように指定しているのと大体同じです。

$ git push --prune origin "refs/tags/*:refs/tags/*"

やっぱ戻したい

upstream からブランチやタグを引っ張ってきて、追跡ブランチやタグを自分のリモートリポジトリに push すれば OK です。

$ git remote add upstream https://github.com/php/php-src.git
$ git fetch upstream
$ git fetch upstream --tags
$ git push origin "refs/remotes/upstream/*:refs/heads/*"
$ git push origin --tags 

さいごに

push する前に -n で何が起こるかを確かめてからやった方が良いです。

22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22