在Git中,列出具有未提交提交的分支的名称

时间:2016-08-30 07:02:54

标签: git branch

给定一个带有多个本地分支的项目,每个分支跟踪一些远程分支,是否有一个命令列出所有已经删除了提交的分支? (即使这些分支都没有签出。)

我不想看到提交本身,也不想看到最新的分支,我只是想看看哪些分支在他们的遥控器之前。

我尝试了git log --branches --not --remotes --simplify-by-decoration --decorate --oneline,但它似乎并没有显示出我需要的东西。在我当前的仓库中运行它不会产生任何输出,但在我当前的分支上运行git status会显示Your branch is ahead of 'origin/branchname' by 2 commits.

git for-each-ref --format="%(refname:short) %(push:track)" refs/headsgit branch -v都显示最新的分支以及需要推送的分支。但是,他们都将我当前的分支显示为[ahead 2]

我找到的其他命令,例如。 git log @{u}..git cherry -v列出提交本身,而不是分支。

附带问题:为什么git log --branches --not --remotes --simplify-by-decoration --decorate --oneline的输出不包含git branch -v显示为未来的分支?以前的命令不仅仅是refs/heads与已知的遥控器不对应;那么列为[ahead 2]的分支是否符合此标准?

4 个答案:

答案 0 :(得分:32)

--no-walk的{​​{1}}选项似乎比log更能满足我的需求。我的完整命令是:

--simplify-by-decoration

...我已将git log --branches --not --remotes --no-walk --decorate --oneline别名。

答案 1 :(得分:9)

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

这仍然是您可以轻松解析/ grep以获得所需输出的最精确答案(如删除最新分支)

您可以在bash脚本中执行此操作,您可以在git-xxx$PATH的某个位置调用%PATH%(无扩展名)。
然后可以使用git xxx调用该脚本,并使用git bash 这是可移植的,可以跨平台工作(即使在Windows上,<Git For Windows>/usr/bin包含200多个linux命令(grepsedawkxargs, ...)

答案 2 :(得分:2)

尽管以上答案非常有帮助,并且显示了大量数据,但是 对于其他人来这里寻找解决方案,以找到领先的本地分支机构,即尚未被推动。可以通过执行以下操作获取确切的列表:

git branch -v | grep ahead

答案 3 :(得分:0)

您还可以查看尚未合并到主分支的分支

git checkout master

然后

git branch --no-merged