Git - 특정 지점의 첫 커밋을 찾는 방법
다음 예제 트리:
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
xxx 지점의 첫 커밋인 F를 찾고 있습니다.저는 다음과 같은 방법으로 가능하다고 생각합니다.
git log xxx --not master
마지막으로 나열된 커밋은 F여야 합니다.올바른 해결책인가요, 아니면 단점이 있을 수도 있나요?
스택 오버플로우에 대해서도 비슷한 질문이 있었다는 것은 알고 있지만, 그런 솔루션을 제안한 사람은 아무도 없고, 제대로 할지도 잘 모르겠습니다.
git log master..branch --oneline | tail -1
여기서 "branch"는 특정 분기 이름입니다.점 점은 지점이 마스터에게 없는 모든 커밋을 제공합니다.tail -1
이전 출력에서 마지막 줄을 반환합니다.
git cherry master -v | head -n 1
cherry
- 분기 업스트림(docs)에 존재하지 않는 현재 분기의 커밋을 표시합니다.업스트림(이 경우 마스터)은 현재 분기에서 파생된 점입니다.
-v
- (SHA 대신) 커밋 이름을 표시합니다. - 장황합니다.
head
- 인쇄하는 Unix 명령어n
텍스트에서 줄 수
당신은 사용해야 합니다.merge-base
이를 정확하게 해결하기 위해 설계된 기능:
git merge-base remotes/origin/<branch> develop
분기(이전 분기)가 다시 마스터로 병합된 경우 예상 결과를 제공하지 않습니다.python 스크립트를 사용하여 초기 branch commit Id를 찾습니다.
git rev-list --첫째 부모 변경 집합
--첫째 부모는 병합 커밋을 볼 때 첫 번째 부모 커밋만 따릅니다.
상위 분기가 발견될 때까지 위 명령에서 변경 집합을 반복합니다.
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에 대한 첫 번째 커밋은 제공하지 않습니다.branch xxx가 삭제되거나 한 번 이상 다시 생성된 경우 후자는 어렵습니다.이 경우 다음을 시도해 볼 수 있습니다.
git reflog | grep checkout | grep xxx | tail -1
git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
매우 간단합니다.이를 통해 피쳐 브랜치에서 첫 번째 커밋의 해시를 직접 가져올 수 있습니다.
git log <source_branch>..<feature_branch> --pretty=format:%h
이 명령어를 사용해봤는데 효과가 있었습니다.
git log <source_branch> <feature_branch> --oneline | tail -1
언급URL : https://stackoverflow.com/questions/18407526/git-how-to-find-first-commit-of-specific-branch
'programing' 카테고리의 다른 글
파일 공급자 - 잘못된 인수예외:구성된 루트를 찾지 못했습니다. (0) | 2023.09.27 |
---|---|
jQuery를 사용하여 선택 상자에 첫번째 옵션을 설정하는 방법? (0) | 2023.09.27 |
파이썬에서 YAML 파일을 파싱하고 데이터에 접근하는 것? (0) | 2023.09.27 |
automake error ' .ltmain.찾을 수 없는 (0) | 2023.09.27 |
python mysql.connector DictCursor? (0) | 2023.09.27 |