如何同步从git仓库中删除的分支?

11 浏览
0 Comments

如何同步从git仓库中删除的分支?

使用git remote prune origin命令可以删除本地不再存在于远程的分支。

但我还想删除那些从这些远程分支创建的本地分支(最好能检查它们是否已合并)。

我该如何操作?

0
0 Comments

如何从git仓库中同步已删除的分支?

这个问题的出现原因是用户想要删除已经合并到主分支(master)的所有本地分支。

解决方法是使用以下命令:

git branch --merged master | grep -v '^[ *]*master$' | xargs git branch -d

如果你的主分支是`main`,则需要相应地修改命令:

git branch --merged main | grep -v '^[ *]*main$' | xargs git branch -d

如果想要了解更多信息,可以点击这里

有人问是否有其他与已接受答案有所不同的解决方法,另有人问是否可以将此命令设置为全局git别名。以下是尝试设置全局别名的命令,但未成功:

git config --global alias.cleaner "branch --merged master | grep -v 'master$' | xargs branch -d"

某些情况下,以"master"结尾的分支不会被删除,他使用了以下命令,因为它与git branch输出的格式匹配:

git branch --merged master | grep -v '^  master$' | xargs git branch -d

有人提出改进意见,建议从当前分支开始基于"git branch --merged master"命令进行操作。在使用git flow时,他希望删除所有未合并到develop分支(当前分支)的分支。以下是改进后的命令:

git branch --merged master | grep -v '^* master$' | xargs git branch -d

还有人提出了一个小改进,使用`xargs -r git branch -d`命令,以防止没有要删除的分支时出错。请注意,`-r`标志在某些环境下可能不可用。

由于git颜色的原因,有人提供了以下命令,以确保grep匹配:

git branch --merged master --no-color | grep -v '^* master$' | xargs -n1 -r git branch -d

有人解释了命令的工作原理,列出了已合并到主分支的分支,然后使用grep排除了主分支本身,最后使用xargs在每个结果上执行`git branch -d`(删除分支)命令。

还有人提出改进意见,使用`egrep -v '^\s*\*?\s*master$'`命令来排除主分支。这样做可以解决git v2.10.1版本中显示"* master"的问题。

有人对上述改进进行了修改,以解决某些情况下未排除主分支的问题。他的命令适用于git 2.14版本。

某些情况下,要将此命令设置为全局git别名,需要在`~/.gitconfig`或其他配置文件中添加以下内容:

cleaner = !git branch --merged master | grep -v '^[ *]*master$' | xargs git branch -d

有人使用`git branch --merged develop | egrep -v 'develop$|master$ | xargs -r git branch -d`命令在develop分支上进行操作。

有人指出,这种方法只适用于远程分支存在的情况。如果分支在合并到主分支后被删除,这种方法将无效。

现在,GitHub鼓励将主分支命名为`main`,所以根据之前的命令,修改后的命令将是:

git branch --merged main | egrep -v '^\s*\*?\s*main$' | xargs git branch -d

有人感谢另一个人提供的评论,这将帮助很多人。然而,这个方法只适用于GitHub。

有人指出,GitLab也将"master"改为"main"。

还有人提出了自己的改进意见,使用以下命令:

( git branch --merged origin/main; git branch --merged origin/master ) 2>/dev/null | tr -d '*' | grep -Ev '^ *(main|master)$' | xargs -r git branch -d

这个命令不依赖于master还是main,使用origin而不是本地的main,移除所有分支的星号(以防main不是当前分支),并在没有列出分支的情况下使用`-r`选项。

最后,有用户指出这个命令只删除已合并的分支,但本地分支可能没有对应的远程分支,所以还有其他原因不删除本地分支。

尽管这个问题已经存在了10年并且有60万次的浏览量,但为什么还没有一个单一的解决方法呢?

0