Git log `--first-parent`, СО только первый объединенный коммит от второго родителя - PullRequest
0 голосов
/ 05 апреля 2019

Фон

Я люблю 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 для репликации вывода, указанного в приведенных выше командах.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Вот как сделать последние 20 коммитов магистрали и кончик любых объединенных ветвей:

git rev-list --first-parent  --parents HEAD \
| sed '/ [^ ]* /!d;s,[^ ]* [^ ]* ,,;s, ,\n,g' >.git/info/grafts

git log --graph --decorate --oneline @~20..

rm .git/info/grafts

sed создает строку для всех вторых или более родительских коммитов основной линии для файла трансплантатов, список локальных предков переписывается специально для случаев, когда записанное происхождение не служит непосредственной цели. «Это выглядит глупо, но это работает.»

$ git log --graph --decorate --oneline @~20..
* d638ded169 (HEAD -> master) options
* 041f5ea1cf (origin/master, origin/HEAD) The third batch
*   0c45fa32ec Merge branch 'br/commit-tree-parseopt'
|\
| * cbdeab98e8 (grafted) commit-tree: utilize parse-options api
*   f6c75e392e Merge branch 'jk/config-type-color-ends-with-lf'
|\
| * cd8e7593b9 (grafted) config: document --type=color output is a complete line
*   6b5688b760 Merge branch 'ma/clear-repository-format'
|\
| * e8805af1c3 (grafted) setup: fix memory leaks with `struct repository_format`
*   83b13e284c Merge branch 'jk/virtual-objects-do-exist'
|\
| * f06ab027ef (grafted) rev-list: allow cached objects in existence check
*   27cdbdd134 Merge branch 'jk/no-sigpipe-during-network-transport'
|\
| * 143588949c (grafted) fetch: ignore SIGPIPE during network operation
*   ea327760d3 Merge branch 'jk/fsck-doc'
|\
| * 8d8c2a5aef (grafted) fsck: always compute USED flags for unreachable objects
*   88255bba45 Merge branch 'js/stress-test-ui-tweak'
|\
| * f545737144 (grafted) tests: introduce --stress-jobs=<N>
*   9fbcc3d203 Merge branch 'js/rebase-orig-head-fix'
|\
| * cbd29ead92 (grafted) built-in rebase: set ORIG_HEAD just once, before the rebase
*   1b8f4dc580 Merge branch 'jk/bisect-final-output'
|\
| * b02be8b901 (grafted) bisect: make diff-tree output prettier
*   3cef67694c Merge branch 'ab/makefile-help-devs-more'
|\
| * 6d5d4b4e93 (grafted) Makefile: allow for combining DEVELOPER=1 and CFLAGS="..."
*   0e94f7aa73 Merge git://ozlabs.org/~paulus/gitk
|\
| * dec59817c1 (grafted) gitk: Update Bulgarian translation (317t)
* e902e9bcae The second batch
*   be9f1c0224 Sync with maint
|\
| * aeb582a983 (grafted, origin/maint) mingw: allow building with an MSYS2 runtime v3.x
*   a07baf33e3 Merge branch 'js/rebase-recreate-merge'
|\
| * dbf47215e3 (grafted) rebase docs: fix "gitlink" typo
*   d61ddb5189 Merge branch 'js/untravis-windows'
|\
| * 50b206371d (grafted) travis: remove the hack to build the Windows job on Azure Pipelines
*   443442ec71 Merge branch 'rd/gc-prune-doc-fix'
|\
| * 716a5af812 (grafted) docs/git-gc: fix typo "--prune=all" to "--prune=now"
*   c0d97d299e Merge branch 'js/find-lib-h-with-ls-files-when-possible'
|\
| * 92b88eba9f (grafted) Makefile: use `git ls-files` to list header files, if possible
* 1de413bc1d Merge branch 'rj/hdr-check-gcrypt-fix'
0 голосов
/ 06 апреля 2019

Git не имеет возможности делать именно то, что вы хотите. Обычно это запрашивается, но он не реализован (и вряд ли будет восходящим).

--topo-order сделает что-то очень похожее на то, что вы хотите, если у вас есть ветки с одним коммитом, потому что это предотвратит перемежение коммитов на ветках с другими ветками. Если у вас есть ветки с несколькими фиксациями, то нет возможности сделать то, что вы запрашиваете.

...