给定一个带有多个本地分支的项目,每个分支跟踪一些远程分支,是否有一个命令列出所有已经删除了提交的分支? (即使这些分支都没有签出。)
我不想看到提交本身,也不想看到最新的分支,我只是想看看哪些分支在他们的遥控器之前。
我尝试了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/heads
和git 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]
的分支是否符合此标准?
答案 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命令(grep
,sed
,awk
,xargs
, ...)
答案 2 :(得分:2)
尽管以上答案非常有帮助,并且显示了大量数据,但是 对于其他人来这里寻找解决方案,以找到领先的本地分支机构,即尚未被推动。可以通过执行以下操作获取确切的列表:
git branch -v | grep ahead
答案 3 :(得分:0)
您还可以查看尚未合并到主分支的分支
git checkout master
然后
git branch --no-merged