git에서 병합 커밋의 부모를 얻는 방법은 무엇입니까?


140

일부 git 명령은 부모를 수정본으로 사용합니다. git revert부모 번호 와 같은 다른 항목 (예 :) 두 경우 모두 부모를 얻는 방법. 그래픽 로그 명령을 사용하고 싶지 않기 때문에 종종 두 번째 부모를 찾기 위해 긴 트리를 아래로 스크롤해야합니다.

답변:


179

git log <hash>병합 커밋에 대한 간단한 호출은 부모의 약식 해시를 보여줍니다.

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git 번호에 따라 부모를 출력합니다 : 첫 번째 (가장 왼쪽) 해시는 첫 번째 부모를위한 것입니다.

원하는 것이 해시 일 경우, 두 가지 동등한 선택은 다음과 같습니다.

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list 부모의 해시를 표시 할 수도 있지만 커밋의 해시를 먼저 나열합니다.

$ git rev-list --parents -n 1 <commit>

당신이 부모를 검사 할 경우, 직접으로 캐럿로 참조 할 수 <commit>^1<commit>^2: 예

git show <commit>^1

이것은 일반화합니다. 문어 병합의 경우 n 번째 부모를로 참조 할 수 있습니다 <commit>^n. <commit>^@단일 커밋이 필요한 경우에는 작동하지 않지만 모든 부모를 참조 할 수 있습니다 . 추가 접미어는 N 후에 게재 번째 상위 구문 (예를 들어 <commit>^2^, <commit>^2^@그들은 이후 수없는 반면,) ^@( <commit>^@^유효하지 않다). 이 구문에 대한 자세한 내용은 rev-parse매뉴얼 페이지를 참조하십시오.


1
내 자신의 질문에 대답 : 'git rev-list --parents -n 1 <somehash>'의 결과는 다음과 같습니다. <somehash> <parent1> <parent2>. 즉, 부모는 하나입니다.
mikemaccana

git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents를 사용할 수도 있습니다 . 그냥 PATH에 넣어와 (HEAD에 기본값을 <커밋>) <커밋> $ 자식 부모님 께 전화
다니엘 리베

@ jefromi, 나는 정말로 "정상 로그 출력이 표시됩니다 ..."부분이 귀하의 답변 맨 위에 있기를 정말로 원합니다. :)
Adam Monsen

3
git loggit show출력 매우 다른 일을 하나의 부모있을 때. git log일관성을 원하는 경우 선호 하십시오.
Noel Yap

이 답변은와 함께 내 우분투 컴퓨터에서 작동하지 않습니다 git (v2.17.1). 출력 Merge파일 이 보이지 않습니다 git log -1.
mja

29

다음은 병합의 부모를 보는 가장 간단한 방법입니다.

git show --pretty=raw 3706454

14
git cat-file -p 3706454 동일하지만 더 짧은 :)
sabgenton

1
둘 다 매우 유용합니다!
tecknut

다른 옵션git log --pretty=raw -1 3706454
selalerer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.