Самый готовый ответ
git show-branch
Что вы можете сделать для большего контроля, так это использовать git log
приложение git rev-list
:
git log --left-right --graph --cherry-pick \
--oneline branchname...remote/branchname
Это мой предпочтительный метод, и он приведет к чему-то вроде
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 some tagged commit
Включите --decorate, и вы получите что-то близкое к gitk, git-gui и gitweb:
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c (tag_4) Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 (tag_3) some tagged commit
СОВЕТ ПРОФЕССИОНАЛА 1. Используйте 'git config alias.lr log --long-option1 --long-option2
' для удобства
СОВЕТ ПРОФЕССИОНАЛА 2. Используйте 'git config color.ui auto
' для мгновенного облегчения зрения
Если вам нужны все локальные головки (во всех локальных ветвях) вместо все удаленных коммитов (на тех же ветвях):
git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk
Прекратите непрогулку, чтобы получить все отдельные изменения. В этом случае я предпочитаю использовать показанные ранее переключатели (--graph --left-right)
Слияния
Если вы хотите четко видеть слияния, включите --boundary
Различные расширенные запросы:
Фильтрация результатов
Git log
и rev-list
поддерживают множество хитрых возможностей фильтрации, см. справочную страницу
--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i --grep='fixes #[0123456789]+'
-S 'new_debug_function'
и многие, многие другие. Это должно дать вам много рычагов, чтобы получить именно ту информацию, которую вы хотите, практически без усилий.
Что спрятано локально?
Что находится в тайниках, но не на удаленных (обратите внимание, что нет способа ссылаться на тайники в удаленных ветвях, потому что тайники находятся в журналах ссылок, а журналы ссылок (даже для удаленных ветвей) всегда отражают локальную историю[1]):
git log $(git rev-list -g stash) --not --glob=refs/remotes
Все (другие) недостижимые коммиты...
Примечания
- в моем рабочем процессе эти составляющие перебазируют/исправляют коммиты и удаляют только тайники
- также их создание займет некоторое время в зависимости от размера вашего графика истории
это будет включать любые выпавшие тайники, но не текущие тайники
git log $(git fsck --unreachable --full --lost-found | grep ' commit ' | cut -d' ' -f3) \ --no-walk --not --glob=refs/remotes --oneline --украсить
Сценарии
Для сценариев замените использование git log
на git rev-list
, и вы получите только хэши (и еще немного надежности script-prof)
[1] См. также мои предыдущие ответы о том, как передавать тайники между репозиториями:
person
sehe
schedule
20.04.2011