Bitbucket でマージ後にソースブランチが消えない
Bitbucket Cloud も Bitbucket Data Center も、頼めばマージの時にプルリクエストのソースブランチを消せます。ただし、どの時点で決めるかが2つで違います。ブランチが残っているときは、たいてい次の5つのどれかです:マージの時にその選択が外れていた・スクリプトが頼まずにマージした・ブランチの権限が残した・既定のブランチだった・Bitbucket からは消えていて手元の Git だけがまだ並べている。
Bitbucket Cloud:Close source branch
- 選択はプルリクエストに保存されます(
close_source_branch)。Cloud の API 定義では、マージがこれを送らないときは「プルリクエストを作った時の値を使い、その既定は False」です。 - 作った後にプルリクエストの側で変えることはできません。変えられるようにする要望(BCLOUD-23488・2024年11月)はまだ票を集めている段階で、回り道はマージの画面で Close source branch に印を付けることです。
- スクリプト:本文なしで
POST …/pullrequests/{id}/mergeすると、保存された値が false で上書きされ、ブランチが残っていました(BCLOUD-17883・2023年1月に修正済みの扱い)。確実なのは自分で送ることです:"close_source_branch": trueを入れた JSON の本文と、Content-Type: application/jsonの見出し。
Bitbucket Data Center:Delete source branch after merging
- Web の画面では、マージの画面の印です。Atlassian の説明(Merge a pull request・8.13)では、ソースブランチに向いている開いたプルリクエストはマージ先へ付け替えられ、そのブランチがリポジトリの既定のブランチのときと、消す権限が無いときは消されません。
- REST API では消えません。
POST …/pull-requests/{id}/mergeはマージだけで、ブランチは2つ目の呼び出しDELETE /rest/branch-utils/latest/projects/{project}/repos/{repo}/branches(本文は{"name": "refs/heads/feature/login", "dryRun": false})で消します。Atlassian の API 定義(9.4)では、書き込みの権限と、ブランチの権限があるときはそのブランチ名へのアクセスが要り、どちらかが無いと 401、既定のブランチなら 400 です。
確かめる所
- Bitbucket から消えているか。リポジトリのブランチの一覧を見ます。そこで消えていれば、手元の Git にリモート追跡のコピーが残っているだけです。
git fetch --pruneで、サーバーにもう無いブランチのコピーが消えます。 - マージの時に選んでいたか。Cloud では API のプルリクエストに
close_source_branchがあります。Data Center ではマージの画面の印です。 - ブランチの権限(Data Center)やブランチの制限(Cloud)でブランチを消せないと、残ることがあります。消せる人が消すか、残すための決まりならそのままにします。
- スクリプト:Cloud ではマージと一緒に
close_source_branchを送ります。Data Center ではマージが通った後に branch-utils を呼びます。 - 手で消すには:Web のブランチの一覧から、または
git push origin --delete feature/login。
IntelliJ IDEA で Bitbucket のプルリクエストを
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Bitbucket Cloud と、ベータ版として Bitbucket Data Center 8.9 以降に対応し、Data Center には個人の HTTP アクセス トークンで、そのサーバーにだけ送ります。マージの画面には「マージ後に(ブランチ)を閉じる」があり、初期値は設定で一度決めておけます。Cloud では毎回のマージで close_source_branch を送るので、プルリクエストに保存された値には左右されません。Data Center では先にマージし、その後で branch-utils でブランチを消します。Bitbucket が消すのを断ったときは、マージはできたがブランチは消せなかったことを、Bitbucket の理由と一緒に知らせます。レビューの受け箱・差分・議論は無料、マージ・承認・コメントは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Bitbucket と Atlassian は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:Bitbucket のマージの方法 · pre-receive hook declined · IntelliJ IDEA で使える Bitbucket のプルリクエストのプラグインの比較 · English