gpt4 book ai didi

git remote prune origin 即使删除了其上游远程分支,也不会删除本地分支

转载 作者:IT王子 更新时间:2023-10-29 01:02:41 28 4
gpt4 key购买 nike

这对我来说是一个常见的用例,我克隆一个存储库, checkout 一个分支,做一些代码更改,进行多次提交,然后当它稳定时,我推送到远程,最终分支被 merge 和删除,我只剩下一个本地分支,上游消失了。

我一直在寻找一种删除所有此类分支的安全方法。从描述来看,似乎 git remote prune origin 正是这样做的。但它似乎对我不起作用。

看到以下行为,分支 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

引用添加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>`

最佳答案

git remote prune 命令仅删除 remotes/origin 中的远程跟踪分支命名空间。

不是本地分支机构。
通常的做法是delete only merged local branches .

git branch(即使有 -vv)只显示本地分支。
branch can have a slash in its name

远程跟踪分支在 remotes/origin 中命名空间,并记录获取的内容。
一个 upstream branch 是与本地分支相关联的远程分支,以便所述本地分支知道要推送到何处

git remote prune 正确删除远程跟踪分支,这恰好是本地bugfix/encrdb_init 的上游分支分支机构。
这就是为什么你看到 origin/bugfix/encrdb_init: gone : 远程跟踪分支没有了。


OP 添加:

from the description, it seemed like git remote prune origin is doing this exactly. But it doesn't seem to be working for me.

不,描述中没有提到本地分支机构。

Deletes all stale remote-tracking branches under <name>.
These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".

<name>这是 git remote -v 引用的 remote 存储库的名称。
通常是“origin”。
git remote prune将删除在 remotes/origin 中注册的分支(不是“ Remote ”)。它不会删除本地分支。

要“安全地”删除本地分支,您应该:

最后一个选项是不稳定的:

  • 我更喜欢使用 git branch -d 而不是 -D,以便只删除已经 merge 的分支。
  • 您最终可能会删除带有包含字符串“: gone”的提交消息的分支

A better way to list those branches is :

git branch --list --format "%(if:equals=[gone])%(upstream:track)%(then)%(refname)%(end)"

关于git remote prune origin 即使删除了其上游远程分支,也不会删除本地分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com