Ответ 1
Опция --no-walk
для log
, похоже, лучше справляется с тем, что мне нужно, чем --simplify-by-decoration
. Моя полная команда:
git log --branches --not --remotes --no-walk --decorate --oneline
... который я сменил на unpushed
.
Учитывая проект с несколькими локальными ветвями, каждый из которых отслеживает удаленную ветвь, есть ли команда, в которой перечислены все ветки, которые не разблокировали транзакции? (То есть, даже если ни одна из этих ветвей не проверена.)
Я не хочу видеть сами коммиты и не хочу видеть ветки, которые актуальны, я просто хочу видеть, какие ветки впереди своих пультов.
Я пробовал 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]
, соответствовала этим критериям?
Опция --no-walk
для log
, похоже, лучше справляется с тем, что мне нужно, чем --simplify-by-decoration
. Моя полная команда:
git log --branches --not --remotes --no-walk --decorate --oneline
... который я сменил на unpushed
.
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads
Это остается самым точным ответом на то, что вы можете легко разобрать /grep, чтобы получить желаемый результат (например, удаление актуальных ветвей)
Вы можете сделать это в bash script, который вы назовете git-xxx
(без расширения), где-нибудь в $PATH
или %PATH%
.
Затем script можно вызвать с помощью git xxx
и будет использовать git bash.
Это переносимо и будет работать на разных платформах (что означает даже в Windows, где <Git For Windows>/usr/bin
включает в себя 200+ команд Linux (grep
, sed
, awk
, xargs
,...)