如何同步本地git仓库并删除在远程仓库中已经不存在的分支

4

我看过很多与此类似的stackoverflow的问题。我已经尝试了许多方法,但仍然卡住了。

我的脚本是这样的:

git fetch --prune

for k in $(git branch --merged| grep -E -v "(^\*|master|dev|release|origin)"); do
  if [ -z "$(git log -1 --since='38 week ago' -s "$k")" ]; then
    ## Info about the branches before deleting
    git log -1 --format="%ci %ce - %H $k" -s "$k";
    ## Delete from the remote
    # git push origin --delete "$k";
    ## Delete the local branch, regardless of whether it's been merged or not
    # git branch -D "$k"
  fi;
done

我明白:

host:folder user$ clean-up.sh 
2018-05-18 14:46:25 -0700 gituser@company.com - 646766c885324b4f298d55604e0aabc2a00fdb58 feature/some-branch
2018-05-16 19:56:56 -0400 gituser@company.com - 4e09733554eaf5e293ca7c668c19ec1395b361f9 some-other-branch

因此,它指出以下两个分支将被删除:

feature/some-branch
some-other-branch

但是这些分支实际上已经被远程删除了,问题是我的本地repo仍然存在它们。我尝试了很多方法来使我的本地repo与远程同步,以便从远程删除的分支也将从本地删除。请问有人知道一个好的解决方案吗?
更好的解决方案是根本不依赖于本地repo,并且能够纯粹地依赖于远程repo清理旧分支。
我尝试过 git remote prune origin,但它没有起作用。

https://stackoverflow.com/search?q=%5Bgit%5D+remove+stale+branches - phd
3个回答

1
尝试执行以下命令:

git remote update origin --prune

具体是什么出了问题?执行命令后,这两个分支应该被删除。 - AndiCover
它只打印了“获取源”的信息,什么都没有。当我再次运行相同的脚本时,我看到这两个分支仍然存在。 - techguy2000

0
学到了新东西。我需要使用git branch -r来查看远程分支。当我这样做时,我需要从分支名称中去掉“origin”。然后,当我想要查找有关该分支的信息时,我需要再次添加“origin”。以下是适用于我的方法:
for k in $(git branch -r --merged | sed 's/origin\///' | grep -E -v "(^\*|master|dev|release|origin)"); do
  if [ -z "$(git log -1 --since='5 week ago' -s "origin/$k")" ]; then
    ## Info about the branches before deleting
    git log -1 --format="%ci %ce - %H $k" -s "origin/$k";
    ## Delete from the remote
    git push origin --delete "$k";
    ## Delete the local branch, regardless of whether it's been merged or not
    # git branch -D "$k"
  fi;
done

0
一句话
git branch -d $(git branch -vv  | grep ': gone]' | cut -d' ' -f3)

这将删除已经不存在的本地分支,但会保留尚未合并的分支。如果您也不需要这些分支,请使用-D选项。
在git版本2.32.1(Apple Git-133)上进行了测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接