Git содержит между произвольными коммитами - PullRequest
3 голосов
/ 08 марта 2012

Мне было интересно, есть ли обобщенный метод определения, является ли коммит родительским для другого.

git branch --contains <hash>

Это почти то, что я хочу.В нем перечислены все ветви, содержащие коммит, но я хочу знать, содержит ли произвольный коммит другой коммит.

Мой временный хак - создать ветку при коммите и затем проверить, содержится ли она в списке, но это кажется неаккуратным.

git branch __temp_branch__ <hash1>
git branch --contains <hash2> # check if __temp_branch__ is in output
git branch -d __temp_branch__

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

git rev-list <childSHA> | grep <parentSHA>

Это вернет <parentSHA>, если он был родителем <childSHA>

1 голос
/ 09 марта 2012

Если commitA является предком commitB, тогда git merge-base commitA commitB равно commitA.Например:

if [ "$(git merge-base $commitA $commitB)" = "$commitA" ]; then ...

Это значительно эффективнее, чем вывод значения git rev-list, если это важно для вас.

0 голосов
/ 08 марта 2012

Одна из возможных причин:

git log --ancestry-path <parentSHA> <childSHA>

Если он ничего не возвращает, вы знаете, что parentSHA не является родителем.

...