git merge-base --is-ancestor
Существует несколько способов найти ответ на этот вопрос. Самый простой способ - использовать
git merge-base --is-ancestor
Из документации для git merge-base
:
--is-ancestor
Проверить, что первый
blockquote>является предком второго
и выйдет со статусом 0, если true, или со статусом 1, если нет. Ошибки сигнализируются ненулевым статусом, который не равен 1.
Другие опции
git log с тройной точкой
...
нотацияДругой вариант - использовать
git log
и использовать трехточечную нотацию...
, чтобы сообщить Git, чтобы вывести установленное объединение дочернего элемента, за вычетом установленного пересечения. В основном, это говорит вам о том, как множество коммитов отклонилось друг от друга:$ git log --oneline --graph --left-right \ --first-parent --decorate
... Вышеупомянутая команда покажет вам коммиты, достижимые с
commit1
илиcommit2
, но не оба, т.е. C1 UNION C2 - C1 INTERSECTION C2 в терминах заданных операций.Если ни одно из них не является родителем другого, вы увидите, что ребенок совершает оба действия, но если один из них является предком другого , вы увидите только вывод для фиксации потомка, поскольку предок содержится в пути потомка и поэтому исключен из вывода.
Вы можете узнать больше о
git log
и тройной (g1) git-log (1) .gitrevisions (1): Указание диапазонов git branch - содержит опцию
git-rev -list (1) кажется, что он может быть использован для ответа на этот вопрос. Другой способ - просто привязать метки временных ярлыков к коммиттам, которые вы хотите проверить, а затем использовать опцию
--contains
дляgit branch
:git branch --contains
Выход будет все ветви, которые содержат коммит где-нибудь в своем дереве фиксации, поэтому, используя временную ветвь на другой фиксации, вы можете увидеть, является ли комманда, которую вы тестируете, предком.
Из документации:
--contains [
] Только ветви списка, которые содержат указанное commit (HEAD, если не указано).
blockquote>