我正在寻找一个可以从git bash运行的命令,以查找从远程删除的分支。以下命令对一个存储库有效,而对其他存储库无效。
git branch -v|grep \\[gone\\]|awk '{print $1}'
即使从位存储桶远程存储库URL中删除了已删除的分支,我也看不到它。上面的命令对一个仓库有效,但对其他仓库无效。 我不想删除分支,只需要知道从远程存储库中删除了所有分支。
谢谢!
答案 0 :(得分:1)
我稀疏,您正在寻找特定的git命令:
git reflog
这向您显示了过去存储库(包括所有已删除的分支)发生了什么情况。如果您的存储库很大,则可以使用grep过滤其输出。
答案 1 :(得分:1)
运行:
git fetch --prune
(如果愿意,可以缩写为git fetch -p
),或者:
git remote origin prune
这两个都应该做同样的事情,但是在某些版本的Git中(我不记得是哪个版本,因为它们已经相当老了,也许是1.8年代的时代)。远程跟踪名称。
运行git fetch
时,您的Git:
(最后一部分中的“部分或全部”说明了以下事实:运行git fetch
的某些方式会限制您的Git要求和/或查找的名称。我们在此不再使用这些名称,但请注意,如果您设置了单分支克隆,则要求Git设置 default 仅查看该名称。在此,我假设您尚未设置单个-分支克隆。 1 )
这里的问题很简单。假设在星期一,您运行git fetch
或git fetch origin
,并且您的Git在某个GitHub URL或任何其他位置调用Git。 他们的 Git目前具有三个分支:master
,feature/a
和feature/b
。因此,您的 Git会创建或更新您的origin/master
,origin/feature/a
和origin/feature/b
。
现在是星期二,您再次运行git fetch
。您的Git调用了他们的Git,由于两个功能都已合并,所以它们降到master
了。因此,您的Git会获取所需的所有新提交,然后更新您的origin/master
。没有feature/a
;没有feature/b
;因此您的Git 对这两个不存在的名称不做任何操作。您的origin/feature/a
被遗弃,而您的origin/feature/b
被遗弃。
您现在有了两个过时的远程跟踪名称!
您可以手动删除它们:
git branch -r -d origin/feature/a origin/feature/b
但是让Git认识到,gee必须自己创建了 origin/feature/a
和origin/feature/b
,这要方便得多,所以也许它应该< em>现在也可以自行删除。 --prune
选项正是这样做的:它获取了他们给您的完整列表,并使用它来减少必须早先遗留下来的所有远程跟踪名称。
1 要找出答案,请运行:
git config --get-all remote.origin.fetch
如果仅打印一行:
+refs/heads/*:refs/remotes/origin/*
您有一个标准的日常设置。如果没有,则您可能具有单分支克隆;至少,您设置了一些不寻常的内容。
使用:
git config --global fetch.prune true
您可以告诉Git您希望所有存储库的git fetch
默认为 git fetch --prune
(即--global
部分)。或者,省去--global
来为一个特定的存储库设置此设置。
我所知道的唯一一个非常小的缺点是,如果有人不小心删除了origin
上的某个分支,并且您设置了此选项并运行了git fetch origin
,则Git会删除您的远程服务器,跟踪名称,您可以早先使用它来在位于origin
的Git中恢复分支名称。换句话说,它会更改您的设置,从而使您无法挽救其他愚蠢的人。如果要拯救他人不在您的工作清单中,那将是次要的事情。