我有很多Git分支.如何删除已合并的分支?是否有一种简单的方法可以删除它们而不是逐个删除它们?
在我目前的回购中,我有以下输出:
$ git branch -a
* master
remotes/origin/master
remotes/public/master
Run Code Online (Sandbox Code Playgroud)
我想remotes/public/master从分支列表中删除:
$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.
Run Code Online (Sandbox Code Playgroud)
此外,输出git remote是奇怪的,因为它没有列出public:
$ git remote show
origin
Run Code Online (Sandbox Code Playgroud)
如何从分支列表中删除"remotes/public/master"?
更新,尝试了git push命令:
$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud) 随着git remote prune origin我可以删除本地分支机构不在遥控器上的任何更多.
但我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好).
我怎样才能做到这一点?
我的情况是这样......在同一个仓库工作的人从他的本地和远程仓库中删除了一个分支......
大多数在Stack Overflow或其他网站上询问此类问题的人都会git branch -a在其底部的远程跟踪分支列表中显示分支问题:
* master
develop
feature_blah
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
remotes/origin/random_branch_I_want_deleted
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,不应该在那里的分支是本地的:
* master
develop
feature_blah
random_branch_I_want_deleted
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
Run Code Online (Sandbox Code Playgroud)
当我执行以下任何操作时,它不会在本地删除:
$ git prune
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
$ git remote prune origin
$ git fetch --prune
Run Code Online (Sandbox Code Playgroud)
更有用的信息:当我检查git remote show origin它是如何看起来:
* remote origin
Fetch URL: utilities:homeconnections_ui.git
Push URL: utilities:homeconnections_ui.git
HEAD branch: master
Remote branches:
master tracked
develop tracked
feature_blah tracked
other123 tracked
other444 tracked
other999 tracked
Local branches configured for 'git pull':
develop merges with remote …Run Code Online (Sandbox Code Playgroud) 我遵循一个开发过程,为每个新功能或故事卡创建一个新的本地分支.完成后,我将分支合并为master,然后推送.
由于懒惰或健忘的结合,随着时间推移会发生的事情是,我最终得到了大量的本地分支,其中一些(例如尖峰)可能没有被合并.
我知道如何列出我所有的本地分支,我知道如何删除一个分支,但我想知道是否有一个git命令允许我删除所有我的本地分支?
以下是该git branch --merged命令的输出.
user@machine:~/projects/application[master]$ git branch --merged
STORY-123-Short-Description
STORY-456-Another-Description
STORY-789-Blah-Blah
* master
Run Code Online (Sandbox Code Playgroud)
所有删除列出的分支的尝试grep -v \*(根据下面的答案)都会导致错误:
error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.
Run Code Online (Sandbox Code Playgroud)
我正在使用:
git 1.7.4.1
ubuntu 10.04
GNU bash,版本4.1.5(1) -
发布GNU grep 2.5.4
我想将本地存储库与远程存储库同步,以便我的本地存储库成为远程存储库的100%副本 - 这意味着如果这些存储库中的某些文件不同,我们会使用远程存储库覆盖本地存储库,如果存在远程中不存在的本地存储库中的文件,本地文件将被删除.
有没有办法实现除了远程存储库的新克隆之外的其他方法?
类似的问题如同本地git repo与远程同步丢弃本地更改/提交.
我希望我的本地和远程存储库在分支方面始终保持同步.
在GitHub上进行Pull Request审核后,我合并并删除了我的分支(远程).我如何在本地存储库中获取此信息并让Git删除我的本地版本的分支?
问题:我想要一种删除没有遥控器的所有本地分支的方法.很容易将分支的名称输入到a中git branch -D {branch_name},但我如何首先获得该列表?
例如:
我创建了一个没有远程的新分支:
$ git co -b no_upstream
Run Code Online (Sandbox Code Playgroud)
我列出了所有的分支,只有一个有远程
$ git branch -a
master
* no_upstream
remotes/origin/HEAD -> origin/master
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
我可以运行什么命令来获得no_upstream答案?
我可以跑git rev-parse --abbrev-ref --symbolic-full-name @{u},这将表明它没有遥控器:
$ git rev-parse --abbrev-ref --symbolic-full-name @{u}
error: No upstream configured for branch 'no_upstream'
error: No upstream configured for branch 'no_upstream'
fatal: ambiguous argument '@{u}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] …Run Code Online (Sandbox Code Playgroud) 有一次,我认为git fetch origin --prune删除了服务器上不再存在的本地分支.不知何故,这不是我目前的经历.
我运行了这个命令,并没有删除本地分支.目前尚未检出.我跑去git branch -vv检查这个信息,我明白了
feature/MyGreatFeature f30efc7 [origin/feature/MyGreatFeature: gone]
Run Code Online (Sandbox Code Playgroud)
所以似乎知道它已经消失了.为什么不删除我的本地分支?
运行 git version 2.7.4 (Apple Git-66)
我尝试git remote -r查看所有远程现有分支,但发现结果包括那些远程删除的分支。
有没有办法过滤掉这些“僵尸”分支?
git ×10
branch ×3
github ×2
bash ×1
git-fetch ×1
git-remote ×1
grep ×1
pull ×1
repository ×1
ubuntu ×1