Фон
Я люблю git log --first-parent
, особенно при использовании в сочетании с --one-line
.Настолько, что я присвоил ему псевдоним lgp
:
log --graph --abbrev-commit --decorate --format=format:'%C(yellow)%h%C(reset) %C(normal)%s%C(reset) %C(dim white)%an%C(reset) %C(dim blue)(%ar)%C(reset) %C(auto)%d%C(reset)' --first-parent
, что дает мне вывод, который выглядит следующим образом:
$ git lgp -5
* 041f5ea1cf The third batch Junio C Hamano (2 weeks ago) (HEAD -> master, origin/master, origin/HEAD)
* 0c45fa32ec Merge branch 'br/commit-tree-parseopt' Junio C Hamano (2 weeks ago)
* f6c75e392e Merge branch 'jk/config-type-color-ends-with-lf' Junio C Hamano (2 weeks ago)
* 6b5688b760 Merge branch 'ma/clear-repository-format' Junio C Hamano (2 weeks ago)
* 83b13e284c Merge branch 'jk/virtual-objects-do-exist' Junio C Hamano (2 weeks ago)
Этот вывод из репозитория git.git
,который использует умную ветвь и стратегию слияния .При таком подходе --first-parent
позволяет отображать чистую историю со всеми деталями каждой объединенной темы (ветви функций), но при необходимости доступной.Например, чтобы увидеть все коммиты, которые в случае объединения с jk/virtual-objects-do-exist
, запустите:
git mergedtopiclg 83b13e284c
* f06ab027ef rev-list: allow cached objects in existence check Jeff King (5 weeks ago) (origin/jk/virtual-objects-do-exist)
* 7c0fe330d5 rev-list: handle missing tree objects properly Matthew DeVore (6 months ago)
* f1d02daacf list-objects: always parse trees gently Matthew DeVore (8 months ago)
* 9202489174 list-objects: refactor to process_tree_contents Matthew DeVore (8 months ago)
* f447a499db list-objects: store common func args in struct Matthew DeVore (8 months ago)
mergedtopiclg
- это следующий псевдоним или пара псевдонимов (не стесняйтесь, чтобы предоставить упрощения или улучшенияк ним также, поскольку я не совсем доволен тем, насколько они сложны, для бонусных голосов!):
oldest-ancestor = !bash -c 'diff --old-line-format= --new-line-format= <(git rev-list --first-parent \"${1:-master}\") <(git rev-list --first-parent \"${2:-HEAD}\") | head -1' -
mergedtopiclg = !sh -c \"git lg $(git oldest-ancestor $1^2 ${2:-master})..$1^2\" -
И, наконец, вопрос
Теперь, иногда, однако, я 'я бы хотел использовать --first-parent
, но показать только первый коммит от второго родителя, который говорит мне , что именно было сделано в коммите , без необходимости смотреть на всех родителейэтого коммитаИтак, мне нужен псевдоним lgpp
, который выдаст мне следующие выходные данные:
$ git lgpp -5
* 041f5ea1cf The third batch Junio C Hamano (2 weeks ago) (HEAD -> master, origin/master, origin/HEAD)
(4 weeks ago) (origin/br/commit-tree-parseopt)
* 0c45fa32ec Merge branch 'br/commit-tree-parseopt' Junio C Hamano (2 weeks ago)
|\
| * cbdeab98e8 commit-tree: utilize parse-options api Brandon Richardson * f6c75e392e Merge branch 'jk/config-type-color-ends-with-lf' Junio C Hamano (2 weeks ago)
* f6c75e392e Merge branch 'jk/config-type-color-ends-with-lf' Junio C Hamano (2 weeks ago)
|\
| * cd8e7593b9 config: document --type=color output is a complete line Jeff King (4 weeks ago) (origin/jk/config-type-color-ends-with-lf)
* 6b5688b760 Merge branch 'ma/clear-repository-format' Junio C Hamano (2 weeks ago)
|\
| * e8805af1c3 setup: fix memory leaks with `struct repository_format` Martin Ågren (5 weeks ago) (origin/ma/clear-repository-format)
* 83b13e284c Merge branch 'jk/virtual-objects-do-exist' Junio C Hamano (2 weeks ago)
|\
| * f06ab027ef rev-list: allow cached objects in existence check Jeff King (5 weeks ago) (origin/jk/virtual-objects-do-exist)
Клон git.git
и перемотайте мастер до 041f5ea1cf987a4068ef5f39ba0a09be85952064 для репликации вывода, указанного в приведенных выше командах.