힘내 : 두 가지의 가장 일반적인 공통 조상 찾기 두 가지 Git 브랜치의 가장

두 가지 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변경 사항이 표시됩니다 .masterfeature

더 많은 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

그리고 두 가지의 역사에서 공통 조상을 쉽게 찾을 수 있습니다.


답변