修剪在上游Git仓库中删除但仍存在于我的fork中的分支

时间:2013-05-03 21:48:44

标签: git bitbucket

我在BitBucket上创建了一个git仓库的分支(我们称之为fork_origin)。现在,上游存储库(让我们称之为upstream_origin)已经将许多分支合并到它的主服务器中并被删除。所以正在运行

git fetch --prune upstream_origin

删除了大量remote/upstream_origin/分支,但现在remote/fork_origin/命名空间中仍存在相同的分支。

是否有标准的git命令来处理这个问题?我想远离在远程存储库上进行批量删除的复杂bash脚本。

更新:

根据建议,我尝试使用远程修剪命令:

git remote prune fork_origin

然而,它没有效果。经过进一步调查,这似乎只适用于“陈旧”的分支机构,但是当我运行时:

git remote show fork_origin

它表明所有分支仍然被“跟踪”。因此,git remote prune命令没有任何陈旧的删除是有道理的。有没有办法强制远程仓库(fork_origin)更新相对于upstream_origin的分支状态?

3 个答案:

答案 0 :(得分:2)

如果要删除遥控器上的分支,请使用以下命令:

git remote prune fork_origin

但在此之前,请看一下这个帖子,看看会出现什么问题:git remote prune – didn't show as many pruned branches as I expected

答案 1 :(得分:0)

没有一个git命令,但你需要;

  • 获取fork_origin
  • 识别remotes/fork_origin/branch中不再存在的任何remotes/upstream_origin(由于您的git fetch --prune upstream_origin
  • git push --delete thoseBranches

这有点类似于“Delete multiple remote branches in git”。

答案 2 :(得分:0)

对于Linux和Mac用户,此命令将删除我工作中已在上游删除的所有分支。

git branch -a | grep origin | awk -F \/ '{print $NF}' > _my_branches.txt; git branch -a | grep upstream | awk -F \/ '{print $NF}' > _upstream_branches.txt; for deleted_branch_name in `comm -23 _my_branches.txt _upstream_branches.txt`; do git push origin :$deleted_branch_name; done

如果您更喜欢步骤而不是一个长命令:

# Find the branches in my fork
git branch -a | grep origin | awk -F \/ '{print $NF}' > _my_branches.txt; 
# Find the branches still in upstream
git branch -a | grep upstream | awk -F \/ '{print $NF}' > _upstream_branches.txt;
# See only the ones that are still in my fork with the comm command
# And only for those branches issue a git command to prunbe them from my fork.
for deleted_branch_name in `comm -23 _my_branches.txt _upstream_branches.txt`; do git push origin :$deleted_branch_name; done