두 가지 Git 브랜치의 가장 일반적인 공통 조상을 찾는 방법은 무엇입니까?
답변
찾고 있습니다 git merge-base
. 용법:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
답변
git diff master...feature
현재 (아마도 커밋 된) 기능 브랜치의 모든 새로운 커밋을 보여줍니다.
man git-diff
다음과 같은 서류 :
git diff A...B
와 같다:
git diff $(git merge-base A B) B
그러나 ...
입력하고 기억하기가 더 쉽습니다.
Dave가 언급했듯이 의 특별한 경우는 HEAD
생략 할 수 있습니다. 그래서:
git diff master...HEAD
와 같다:
git diff master...
현재 분기가 인 경우 충분합니다 feature
.
마지막으로, 그 순서가 중요하다는 것을 기억하십시오! 수행 중이 아닌 git diff feature...master
변경 사항이 표시됩니다 .master
feature
더 많은 git 명령이 해당 구문을 지원하기를 원하지만 그렇게 생각하지 않습니다. 그리고 일부는 심지어 다른 의미를 가지고 ...
: 망할 놈의 “…” “..”트리플 점 두 점 사이의 차이는 범위는 무엇 커밋인가?
답변
이전 답변에서 언급했듯이 다음과 같이 git merge-base
작동합니다.
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
그러나 myfeature
현재 분기가 일반적인 경우 use를 사용할 수 있습니다 --fork-point
.
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
이 인수는 충분히 최신 버전의 git에서만 작동합니다. 그러나 불행히도 항상 작동하는 것은 아니며 왜 그런지 명확하지 않습니다. 이 답변 끝에 언급 된 제한 사항을 참조하십시오 .
전체 커밋 정보를 보려면 다음을 고려하십시오.
$ git log -1 $(git merge-base --fork-point develop)
답변
함께 gitk
사용하면 그래픽으로 두 가지를 볼 수 있습니다
gitk branch1 branch2
그리고 두 가지의 역사에서 공통 조상을 쉽게 찾을 수 있습니다.