リモートブランチを自動削除する設定

GitHubのリポジトリのSettigs -> Options -> Merge buttonにあるAutomatically delete head branchesを有効化する。

GitHub delete branch with pull request width=640

GitHub delete branch with pull request width=640

Pull Requestをマージする

プルリクエストを作成し、マージすると・・・deleted the issue8 branchとなっている。

GitHub delete branch with pull request width=640

マージされたあとの状態

ローカルは自動に削除されないが、リモートは削除された状態のはず。
ブランチの状態を確認する・・・リモートも消えていない?

1
2
3
4
5
6
PS > git branch --merged 
* issue8
master
PS > git branch --remote --merged
origin/issue8
origin/master

ローカルブランチを削除

ローカルは自動では消えないので削除する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS > git branch -d issue8
error: Cannot delete branch 'issue8' checked out at 'XXXXXXXXXXXXXXXXX'
PS > git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
PS > git pull
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
xxxxx..xxxxx master -> origin/master
Updating xxxxx..xxxxx
Fast-forward
src/XXXXXXXXXXXXXXX | 16 ++++++++++++++--
src/XXXXXXXXXXXXXXX | 2 +-
2 files changed, 15 insertions(+), 3 deletions(-)

リモートブランチを削除・・・エラー

リモートブランチを削除するとエラー。

1
2
3
4
5
6
7
8
PS > git branch --remote --merge
origin/issue8
origin/master
PS > git branch -d issue8
Deleted branch issue8 (was ccb846c).
PS > git push --delete origin issue8
error: unable to delete 'issue8': remote ref does not exist
error: failed to push some refs to 'xxxxxxxxxxxxxx/xxxxxxxxxxxxxx'

消えている。ローカルのゴミが残っているだけだ。
git remote prune originで削除できる。
git fetch --pruneでも。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PS > git branch --remote --merge
origin/issue8
origin/master
PS > git branch --remote
origin/issue8
origin/master
PS > git remote show origin
* remote origin
Fetch URL: XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
Push URL: XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
HEAD branch: master
Remote branches:
master tracked
refs/remotes/origin/issue8 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)
PS > git remote prune origin
Pruning origin
URL: XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
* [pruned] origin/issue8
PS > git branch --remote --merge
origin/master

自動的に消すには

git config --global fetch.prune trueでfetch時に自動削除できる。

設定しているとgit pullなどのfetchを含む処理で消える。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PS > git branch -r
origin/issue11
origin/master
PS > git pull
From XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
- [deleted] (none) -> origin/issue11
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From XXXXXXXXXXXXXXX:XXXXXXXXXXXXXXX/XXXXXXXXXXXXXXX
xxxxx..xxxxx master -> origin/master
Updating xxxxx..xxxxx
Fast-forward
src/XXXXXXXXXXXXXXX | 16 ++++++++++++++--
src/XXXXXXXXXXXXXXX | 2 +-
2 files changed, 15 insertions(+), 3 deletions(-)
PS > git branch -r
origin/master