Первым решением, о котором я могу думать, является использование ViewBag для хранения значений, которые должны отображаться.
На самом деле я никогда не пробовал, если это работает с частичным представлением, но оно должно быть imo.
git merge-base --is-ancestor <commit1> <commit2>
Существует несколько способов найти ответ на этот вопрос. Самый простой способ - использовать
git merge-base --is-ancestor <commit> <commit>
Из документации для git merge-base
:
--is-ancestor
Проверить, что первый
blockquote><commit>
является предком второго<commit>
и выйдет со статусом 0, если true, или со статусом 1, если нет. Ошибки сигнализируются ненулевым статусом, который не равен 1.Другие опции
git log с тройной точкой
...
нотацияДругой вариант - использовать
git log
и использовать трехточечную нотацию...
, чтобы сообщить Git, чтобы вывести установленное объединение дочернего элемента, за вычетом установленного пересечения. В основном, это говорит вам о том, как множество коммитов отклонилось друг от друга:$ git log --oneline --graph --left-right \ --first-parent --decorate <commit1>...<commit2>
Вышеупомянутая команда покажет вам коммиты, достижимые с
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 <commit-to-test>
Выход будет все ветви, которые содержат коммит где-нибудь в своем дереве фиксации, поэтому, используя временную ветвь на другой фиксации, вы можете увидеть, является ли комманда, которую вы тестируете, предком.
Из документации:
--contains [<commit>]
Только ветви списка, которые содержат указанное commit (HEAD, если не указано).
blockquote>
Следующий скрипт оболочки может сделать трюк:
if git rev-list $SHA1 | grep -q $SHA2 ; then echo "$SHA2 is ancestor of $SHA1"
elif git rev-list $SHA2 | grep -q $SHA1 ; then echo "$SHA1 is ancestor of $SHA2"
else echo "$SHA1 unrelated to $SHA2" ; fi
Или, чтобы аккуратно включить его в псевдоним git:
git config --global alias.related '!function git_related() { if git rev-list $1 | grep -q $2 ; then echo "$2 is ancestor of $1" ; elif git rev-list $2 | grep -q $1 ; then echo "$1 is ancestor of $2" ; else echo "$1 unrelated to $2" ; fi } ; git_related $1 $2'
git config --global alias.related '!function git_related() { commit1=`git log -n 1 --format="%h" $1` ; commit2=`git log -n 1 --format="%h" $2` ; if git rev-list $commit1 | grep -q $commit2 ; then echo "$2 is ancestor of $1" ; elif git rev-list $commit2 | grep -q $commit1 ; then echo "$1 is ancestor of $2" ; else echo "$1 unrelated to $2" ; fi } ; git_related $1 $2'
– Peter Reay
12 October 2017 в 15:50
git log --oneline -1 OLD_SHA..NEW_SHA
Iff это дает вам некоторый журнал, тогда OLD_SHA является родителем NEW_SHA.
if (( $(git rev-list $1..$2|wc -l) == 0 )); then echo "$2 is ancestor of $1"
elif (( $(git rev-list $2..$1|wc -l) == 0 )); then echo "$1 is ancestor of $2"
else echo "$1 and $2 are unrelated"
fi
Чтобы создать превосходный псевдоним @ helmbert git related
, вот версия, которая также принимает имена ветвей (или HEAD и т. д.) в качестве аргументов, а не просто фиксирует идентификаторы:
git config --global alias.related '!function git_related() { commit1=`git log -n 1 --format="%h" $1` ; commit2=`git log -n 1 --format="%h" $2` ; if git rev-list $commit1 | grep -q $commit2 ; then echo "$2 is ancestor of $1" ; elif git rev-list $commit2 | grep -q $commit1 ; then echo "$1 is ancestor of $2" ; else echo "$1 unrelated to $2" ; fi } ; git_related $1 $2'
--is-ancestor
был введен в git v1.8. Ваш примерgit branch
отлично работал на машине с git v1.7.x. – eoinoc 15 October 2013 в 12:01git log --contains <commit>
(который показывает все коммиты, содержащие конкретную фиксацию), похожие наgit tag --contains
иgit branch --contains
– Jarl 20 February 2014 в 09:38echo $?
. – Pang 20 March 2015 в 09:42