如何同步从git仓库中删除的分支?
如何从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万次的浏览量,但为什么还没有一个单一的解决方法呢?