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

det*_*tly 45 git branch

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

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

我试过了git log --branches --not --remotes --simplify-by-decoration --decorate --oneline,但它似乎没有显示我需要的东西.在我当前的repo上运行它没有输出,但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]符合此标准?

det*_*tly 49

--no-walk选项log似乎做什么,我需要比一个更好的工作--simplify-by-decoration.我的完整命令是:

git log --branches --not --remotes --no-walk --decorate --oneline

...我已经别名了unpushed.

  • 对我来说,这也显示了位于遥控器后面并且可以快进的分支。这些分支没有未推送的本地更改。 (7认同)
  • 或者,如果您有多个遥控器:git log --branches --not --remotes = origin --no-walk --decorate --oneline`以查看尚未推送到`origin`遥控器的内容。 (2认同)

Von*_*onC 12

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
Run Code Online (Sandbox Code Playgroud)

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

您可以在bash脚本中执行此操作,您将调用git-xxx(无扩展名),在您$PATH或中的某个位置%PATH%.
然后可以调用该脚本git xxx,并将使用git bash.
这是便携式的,将跨平台(甚至在Windows上,在那里工作的意思<Git For Windows>/usr/bin包括200多个Linux命令(grep,sed,awk,xargs,...)


Zai*_*och 7

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

git branch -v | grep ahead
Run Code Online (Sandbox Code Playgroud)


Dan*_*non 5

还可以看到哪些分支还没有合并到master

git checkout master
Run Code Online (Sandbox Code Playgroud)

进而

git branch --no-merged
Run Code Online (Sandbox Code Playgroud)