두 가지 Git 브랜치의 가장 일반적인 공통 조상을 찾는 방법은 무엇입니까?
두 가지 Git 브랜치의 가장 일반적인 공통 조상을 찾는 방법은 무엇입니까?
답변:
찾고 있습니다 git merge-base
. 용법:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git log master...HEAD
--octopus
은 올바른 결과를 얻으려면 깃발을 통과해야한다는 점에 유의해야합니다 . 명백하지만 잘못 git merge-base branch1 branch2 branch3
은 커밋을 제공하지만 문서의 토론 섹션에 설명 된 것처럼 반드시 세 가지 가지의 공통 조상 은 아닙니다 .
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 diff master...
특별한 경우HEAD
git diff origin/branchname...
이전 답변에서 언급했듯이 다음과 같이 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)
git version 2.14.1.windows.1
. 실행 git merge-base --fork-point branch2
지점으로 (자신의 커밋과) 것을 내가 아는 어떤 결과를 양보하지 않는 현재의 지점에서 포크했다, 반면 git merge-base branch1 branch2
올바르게 포크 점을 보여줍니다. 무엇이 문제 일 수 있습니까?
branch2
을 실행 한 다음 실행하십시오 git merge-base --fork-point branch1
.
gitk
등)를 사용하여 트리가 어떻게 보이는지 확인하십시오. 아마 당신은 당신의 대답을 얻을 것입니다.
git merge-base branch1 branch2
. 그러나 이상한 점 --fork-point
은 어느 쪽도 제공하지 않는다는 것입니다. 의도 한대로 작동하는지 확인 했습니까?