是否有一个脚本列出由我创建的git分支?

haw*_*eye 36 git branch code-cleanup

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

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

这与"查找未合并的分支"不同,因为我也希望找到合并的分支,我想通过作者来完成.

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

Sac*_*nny 49

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

git for-each-ref --format=' %(authorname) %09 %(refname)' --sort=authorname 
Run Code Online (Sandbox Code Playgroud)

如果您正在使用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
Run Code Online (Sandbox Code Playgroud)

有关详细信息,git for-each-ref请访问此处.

  • 这列出了分支,但不是它们的作者。它们按每个分支上次提交的作者排序,而不是分支作者。 (4认同)
  • 有没有更好的方法除了通过grep管道限制它只是我的? (3认同)
  • 这并没有回答这个问题。OP 明确指出了这个问题:“我的问题是:是否有一个脚本可以列出我创建的 git 分支?” 这个答案是不够的 (2认同)
  • 没有显示任何内容,所以我将其更改为: `git for-each-ref --format="%(if)%(authorname)%(then)%(authorname)%(end): %(refname)" --sort=authorname`想法来自https://git-scm.com/docs/git-for-each-ref (2认同)

Ski*_*ore 21

这里的聚会有点晚了,但这是搜索“list git branch for author”时在谷歌上的最高结果。

在 git 中查找远程分支的单行代码是:

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

git branch -r - 列出所有远程分支。

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

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

标志-s抑制差异输出。

标志--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
Run Code Online (Sandbox Code Playgroud)

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

  • @Noumenon 我也是。通过向第一项添加格式来修复此问题: `git Branch -r --format='%(refname)' | ...` (3认同)
  • 热当当!抛开性能不谈,出色的反应和详细的解释。这就是我所爱的SO。 (2认同)

Yun*_*hua 7

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

git for-each-ref --sort=authorname --format "%(authorname) %(refname)"
Run Code Online (Sandbox Code Playgroud)

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


Eri*_*ric 5

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

git branch --merged | grep -Pv "\*|master|dev" | xargs -n 1 git branch -d
Run Code Online (Sandbox Code Playgroud)