有一个脚本可以列出我创建的git分支吗?

问题描述 投票:0回答:8

我知道分支并不真正存储创建者信息 - 它们只是指向提交的指针。

我的目标是能够清理已合并回主分支的旧分支,并列出尚未完成此操作的分支。 (清理)。

这与“查找未合并的分支”不同,因为我也想查找合并的分支,并且我想由作者来完成。

我的问题是:是否有一个脚本来列出我创建的 git 分支?

git branch code-cleanup
8个回答
124
投票

此命令列出所有分支及其作者姓名

git for-each-ref --format=' %(authorname) %09 %(refname)' --sort=authorname 

如果您使用 github,您还可以访问 https://github.com/author/repo/branches/yours 获取所有分支

如果您只想删除所有已合并的分支,您可以使用命令

git branch --merged | grep -v "\*" | grep -v master | grep -v dev | xargs -n 1 git branch -d

欲了解

git for-each-ref
的更多详情,请访问这里


37
投票

参加聚会有点晚了,但这是搜索“list gitbranch forauthor”时谷歌上的最高结果。

在 git 中查找远程分支的简单方法是:

git branch -r | xargs -L1 git --no-pager show -s --oneline --author="$(git config user.name)"

gitbranch -r - 列出所有远程分支。

xargs -L1 - 将上一个命令的结果转换为下一个命令的参数。

git show - git show,显示 git 中的各种对象.在这种情况下,它将显示每个分支上的最新提交,以及完整的差异。

标志 -s 抑制 diff 输出。

标志 --oneline 将提交信息压缩为一行。

标志 --author="$(git config user.name)" 仅显示当前 git 用户的提交。

标志 --no-pager 在没有分页器的情况下运行 git。如果没有此标志,结果的每次提交都将在其自己的寻呼机实例中打开,这可能取决于您的寻呼机。

最终结果将如下所示:

efbd5d738b (origin/feature/A) commit feature A
297e83d9a6 (origin/feature/B) commit feature B
951f6638de (origin/test/A) commit test A
307d16741b (origin/master) latest master commit

请注意,如果给定作者是这些分支上的最新提交者,则列表将包含 master 和development 分支。


15
投票

尝试了上面“SachinSunny”的答案,将其修改为

git for-each-ref --sort=authorname --format "%(authorname) %(refname)"

这给出了作者和分支,包括本地和远程分支,按“最后作者”排序


5
投票

作为上面 SachinSunny 答案的稍微浓缩,您可以使用 grep 的正则表达式功能来完成更简单的命令:

git branch --merged | grep -Pv "\*|master|dev" | xargs -n 1 git branch -d

3
投票

对于 Git 2.23 版本,您只需输入:

git branch

它会给你列出本地分支机构列表。请记住,这还将包括

master
和您合并的其他内容。要过滤这些管道结果,请使用
egrep -v "(^\*|master|development)

如果您想包含遥控器,您可以执行以下操作:

git for-each-ref --format=' %(authorname) %09 %(refname)' --sort=authorname | egrep -v "(^\*|master|development)"| grep 'Your Name'

要删除,请使用管道

xargs git branch -D


1
投票

与接受的答案几乎相同的命令,但使用

| while read

更方便
git for-each-ref --format='%(authorname),%(refname:lstrip=3),%(refname:short)' --sort=authorname | while IFS=',' read author branch remote_branch; do
  printf "%20s | %40s | %s\n" "$author" "$branch" "$remote_branch"
done

输出:


0
投票

此命令对于显示当前分支很有用

git ls-remote --heads origin

此命令对于获取远程存储库中可用分支的概述非常有用,而无需在本地克隆整个存储库


-1
投票

这将列出当前已合并的分支未合并的分支,但不一定仅由您创建(这不是您想要的完全,但它可能很有用,特别是如果您知道只有一个分支不是您创建的 -否则你可以过滤掉它们 - 所以我无论如何都会发布它),每行一个分支,不包括

master
main
以及(因为它将每个分支放在一行上)当前标记的分支(
* 
)(即指示器:它将打印分支本身):

$ git branch |tr -s ' '|sed -e 's/^ //g' -e 's/ /\n/g' |tr ' ' '\n'|grep -vE '^(master|main|\*)$'

要创建 bash 别名,您可能需要:

$ alias git-ls-branches="git branch |tr -s ' '|sed -e 's/^ //g' -e 's/ /\n/g' |tr ' ' '\n'|grep -vE '^(master|main|\*)$'"

您也可以将其放入您的

.bashrc
或同等文件中。

这也会列出其他人创建的分支,但如果你知道没有其他分支,你应该很好......没有我可能犯的任何拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.