Git-특정 브랜치의 첫 번째 커밋을 찾는 방법
다음 예제 트리에서 :
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
xxx 지점의 첫 번째 커밋 인 F를 찾고 있습니다. 다음과 같이 가능하다고 생각합니다.
git log xxx --not master
마지막으로 나열된 커밋은 F 여야합니다. 올바른 솔루션입니까 아니면 단점이 있습니까?
나는 stackoverflow에 비슷한 질문이 있다는 것을 알고 있지만 아무도 그러한 솔루션을 제안하지 않았으며 내가 올바르게 수행하는지 확실하지 않습니다.
git log master..branch --oneline | tail -1
여기서 "branch"는 특정 지점 이름입니다. 점-점은 브랜치에 마스터가없는 커밋을 모두 제공합니다. tail -1
이전 출력에서 마지막 줄을 반환합니다.
merge-base
이 문제를 정확히 해결하도록 설계된 기능을 사용해야합니다 .
git merge-base remotes/origin/<branch> develop
git cherry master -v | head -n 1
브랜치 (이전 브랜치)가 다시 마스터로 병합되어 예상 결과가 나오지 않는 경우 Python 스크립트를 사용하여 초기 브랜치 커밋 ID를 찾습니다.
git rev-list --first-parent changeset
--first-parent 는 병합 커밋을 볼 때 첫 번째 부모 커밋 만 따릅니다.
상위 분기를 찾을 때까지 위의 명령에서 변경 집합을 반복합니다.
def status_check(exec_command, exec_dir=None, background=False):
if exec_dir:
os.chdir(exec_dir)
res = subprocess.Popen(exec_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if not background:
result = res.communicate()
return result
def findNewBranchCommits(changeset=None):
cmd = "git rev-list --first-parent "+ changeset
rev_list = status_check(cmd,self.module_dir)
rev_list = str(rev_list[0]).split('\n')
rev_list = list(filter(None, rev_list))
for x in rev_list: # Iterate until branch base point
rev_cmd = "git branch --contains " + x
rev_cmd = status_check(rev_cmd,self.module_dir)
rev_cmd = str(rev_cmd[0]).split('\n')
if(len(rev_cmd) > 2):
print "First Commit in xxx branch",x
break
findNewBranchCommits(changeset)
git cherry master -v | tail -1
그러나 이것은 마스터에없는 xxx 브랜치에 대한 첫 번째 커밋 만 제공하고 xxx 브랜치의 첫 번째 커밋은 제공하지 않습니다. 후자는 xxx 분기가 삭제 및 / 또는 한 번 이상 다시 생성 된 경우 어려울 수 있습니다. 이 경우 다음을 시도해 볼 수 있습니다.
git reflog | grep checkout | grep xxx | tail -1
git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
참고 URL : https://stackoverflow.com/questions/18407526/git-how-to-find-first-commit-of-specific-branch
'developer tip' 카테고리의 다른 글
Git 저장소 (기록)에서 파일 제거 (0) | 2020.10.17 |
---|---|
const-correctness가 성능을 향상시킬 수 있습니까? (0) | 2020.10.17 |
JNI 프로젝트에서 UnsatisfiedLinkError (종속 라이브러리를 찾을 수 없음)를 수정하는 방법 (0) | 2020.10.17 |
TeamCity는 MSBuild 단계에서 "/ property :"대신 "Build Parameters"를 사용한다고 말합니다. (0) | 2020.10.17 |
텍스트 또는 바이트 문자열 (0) | 2020.10.17 |