Git 배포판과 함께 제공되는 post-receive-email 스크립트를 살펴보십시오 (로컬 복사본이 필요한 경우 /usr/share/doc/git-core/contrib/hooks/post-receive-email
과 같은 위치에 설치해야합니다). ,
# Consider this:
# 1 --- 2 --- O --- X --- 3 --- 4 --- N
#
# O is $oldrev for $refname
# N is $newrev for $refname
# X is a revision pointed to by some other ref, for which we may
# assume that an email has already been generated.
# In this case we want to issue an email containing only revisions
# 3, 4, and N. Given (almost) by
#
# git rev-list N ^O --not --all
#
# The reason for the "almost", is that the "--not --all" will take
# precedence over the "N", and effectively will translate to
#
# git rev-list N ^O ^X ^N
#
# So, we need to build up the list more carefully. git rev-parse
# will generate a list of revs that may be fed into git rev-list.
# We can get it to make the "--not --all" part and then filter out
# the "^N" with:
#
# git rev-parse --not --all | grep -v N
#
# Then, using the --stdin switch to git rev-list we have effectively
# manufactured
#
# git rev-list N ^O ^X
이 코멘트에 코너 케이스를 처리하기 위해 자세한 내용이 있습니다 이것은 단지 찾을 주어진 지점에서 새로운 것을 확약하고, 전에 다른 사람에서 볼되지 않은 방법에 대해 설명 긴 설명을 가지고 나머지 스크립트
git rev-parse --not --all | grep -v I | git rev-list --stdin I
당신이 $(git rev-parse branch1)
으로 I
을 계산할 수 있습니다 : 기본 경우 당신이 걱정하는 모든 경우 그러나, 이것은 당신에게 대답을해야한다. 결과의 마지막 항목은 커밋 H
, 가장 가까운 조상은 H^
로 분기 할 수 있습니다.
나는 당신이 찾고있는 것을 잘 모르겠다. 가장 초기 (또는 가장 최근)를 찾고 싶습니다. "첫 번째"는 현재 위치와 다른 지점에 포함되어있는 "최초의"또는 "현재 위치에 가장 가까운"것을 의미합니까? 그것은 현재 지점뿐만 아니라 다른 지점에도 포함되어 있습니까? 다이어그램에 실제로 분기가 표시되지 않습니다 (나는 E, G 및 I가 커밋이라고 가정하고 있음). 따라서 어느 것이 세고 있는지 말할 수 없습니다. –
@BrianCampbell 추가 및 설명; 다이어그램은 실제로 너무 부정확했다. – phihag
글쎄, 당신이 원하는 것은'git merge-base branch1 development'이지만, 당신의 지사가 무엇인지 알지 못한다면 그것을하는 쉬운 방법을 모른다. merge-base'를 다른 지점과 비교하고 어떻게 든 "승자"를 선택하는 것입니다 ... – twalberg