覚えた事を忘れないように書いておこうシリーズ。
# branchnameブランチを削除 $ git branch -d branchname
「まだマージされてないコミットがあるぞ!」と怒られる時は-Dオプションを指定する。
# branchnameブランチを強制的に削除 $ git branch -D branchname
リモートのoriginやupstreamを追いかけていて、既にリモートで削除されているブランチを追跡していたローカルブランチ。これは手で消さないとずっと残っている。
# branchnameブランチの追跡用ブランチを指定して削除 $ git branch -r -d origin/branchname # リモートで削除済みのブランチに対応する追跡用ブランチをまとめて消す $ git remote prune origin * [pruned] origin/develop-X.Y.Z * [pruned] origin/release-X.Y.Z
空のローカルブランチを指定してリモートに押し付けるイメージで覚えてる。
# リモートにあるbranchnameブランチを削除 $ git push origin :branchname # 新しめのバージョンでは以下のオプションでも同等の操作となる $ git push --delete origin branchname
ブランチとほぼ同じ感覚なんだけど、異なる点も幾つかある。
# ローカルで打ったタグをリモートにも反映 $ git push origin v-X.Y.Z # 一度打ったローカルのタグを消す $ git tag -d v-X.Y.Z # リモートのタグを消す $ git push origin :v-X.Y.Z # 新しめのバージョンでは以下のオプションでも同等の操作となる $ git push --delete origin v-X.Y.Z
一度ハマったのが、「既にリモートからfetchされているタグと、新しくリモートにpushされた同名のタグが違う。どうやって反映するんだ?」というケース。
これはローカルのタグを一旦消してしまえば良いみたい。もっとスマートなやり方あるのかな。
# 今ローカルにあるv-X.Y.Zとリモートに同名のv-X.Y.Zで打ってあるコミットが異なる $ git tag -l v-X.Y.Z # 一旦ローカルのv-X.Y.Zを削除 $ git tag -d v-X.Y.Z Deleted tag 'v-X.Y.Z' (was abcd123) # 改めてfetch $ git fetch origin * [new tag] v-X.Y.Z -> v-X.Y.Z
タグを打つコストが安くて、一度打ったタグを消してコミットの位置を打ち直しが簡単に出来てしまう点は、Subversionから移った人が驚くところだと思う。
各種ブランチの名称と役割については、以下のエントリがとても参考になる。
最近のツッコミ
参号館 日記(ariyasacca)