sak*_*trp 13 git git-remote git-branch
这是一个常见的用例,我克隆一个存储库,签出一个分支,做一些代码更改,进行多次提交,然后当它稳定时,我做一个推送到远程,最终分支被合并和删除.我离开了一个上游的当地分支机构.
我一直在寻找一种删除所有这些分支的安全方法.从描述来看,似乎git remote prune起源正是这样做的.但它似乎并不适合我.
看到以下行为,分支encrdb_init已被删除remote但git remote prune origin命令似乎没有修剪它.我不知道为什么.
$ git branch
bugfix/encrdb_init
* master
$
$ git remote prune origin
$
$ git checkout bugfix/encrdb_init
Switched to branch 'bugfix/encrdb_init'
Your branch is based on 'origin/bugfix/encrdb_init', but the upstream
is gone.
(use "git branch --unset-upstream" to fixup)
$
$ git branch
bugfix/encrdb_init <<< shouldn't this have been pruned?
* master
Run Code Online (Sandbox Code Playgroud)
供参考添加输出 git remote show origin
$ git remote show origin
* remote origin
Fetch URL: <redacted>
Push URL: <redacted>
HEAD branch: master
Remote branches:
SSL_test tracked
addNodeFix tracked
autoprefix tracked
release/1.0.2 tracked
Local branches configured for 'git pull':
bugfix/encrdb_init merges with remote bugfix/encrdb_init
master merges with remote master
release/1.0.2 merges with remote release/1.0.2
Local refs configured for 'git push':
master pushes to master (up to
date)
release/1.0.2 pushes to release/1.0.2 (up to
date)
$ git branch -vv
* bugfix/encrdb_init 341a078c [origin/bugfix/encrdb_init: gone] <redacted comment>`
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 11
该git remote prune命令仅删除remotes/origin命名空间中的远程跟踪分支.
不是当地的分支机构.
通常的做法是仅删除合并的本地分支.
git branch(甚至使用-vv)只显示本地分支.
一个分支可以在其名称中的斜杠
远程跟踪分支位于remotes/origin命名空间中,并记录获取的内容.
的上游分支是为了使所述本地分支知道相关联的本地分支远程分支,其中推.
git remote prune正确删除远程跟踪分支,该分支恰好是本地bugfix/encrdb_init 分支的上游分支.
这就是为什么你看到origin/bugfix/encrdb_init: gone:远程跟踪分支已经消失.
OP增加:
从描述来看,它似乎
git remote prune origin正是这样做的.但它似乎并不适合我.
不,描述没有提到当地分支机构.
删除所有过时的远程跟踪分支
<name>.
这些过时的分支已经从引用的远程存储库中删除<name>,但仍然在"remotes/<name>"中本地可用.
<name>这是git remote -v引用的远程仓库的名称.
通常是" origin".
git remote prune将删除注册的分支remotes/origin(不是"远程").它不会删除本地分支.
要"安全地"删除本地分支,您应该:
git fetch -p && git branch -d $(git branch master --merged | grep master -v)
Run Code Online (Sandbox Code Playgroud)或者,如果你真的想立即删除上游分支"消失"的那个:
git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done
Run Code Online (Sandbox Code Playgroud)最后一个选项是不稳定的:
: gone"git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7425 次 |
| 最近记录: |