Git Commit Ranges에서 Double-Dot“..”와 Triple-Dot“…”의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/462974

  •  19-08-2019
  •  | 
  •  

문제

일부 git 명령은 커밋 범위를 취하고 하나의 유효한 구문은 두 개의 커밋 이름을 두 개의 점으로 분리하는 것입니다. .., 다른 구문은 세 개의 점을 사용합니다 ....

둘의 차이점은 무엇입니까?

도움이 되었습니까?

해결책

사용 여부에 따라 다릅니다 log 명령 또는 a diff 명령. 에서 log 케이스, 그것은 있습니다 man git-rev-parse 선적 서류 비치:

커밋에서 도달 할 수있는 커밋을 제외하기 위해 접두사 ^ 표기법이 사용됩니다. 예를 들어 ^r1 r2는 R2에서 도달 할 수있는 커밋을 의미하지만 R1에서 도달 할 수있는 것을 제외합니다.

이 세트 작업은 너무 자주 나타나서 속기가 있습니다. 두 개의 커밋 R1과 R2가있는 경우 (위의 개정판 지정에 설명 된 구문에 따라 명명 됨) "^r1 r2"로 R1에서 도달 할 수있는 것을 제외하고 R2에서 도달 할 수있는 커밋을 요청할 수 있으며 다음과 같이 쓸 수 있습니다. "R1..R2".

유사한 표기법 "R1 ... R2"를 R1과 R2의 대칭 차이라고하며 "R1 R2-NOT $ (GIT MERGE-BASE -ALL R1 R2)"로 정의됩니다. R1 또는 R2 중 하나에서 도달 할 수있는 커밋 세트입니다.

이는 기본적으로 두 가지에있는 모든 커밋을 얻을 수 있지만 둘 다에서는 그렇지 않다는 것을 의미합니다.

에서 diff 케이스, 그것은 있습니다 man git-diff 선적 서류 비치:

  git diff [--options] <commit>...<commit> [--] [<path>...]

      This form is to view the changes on the branch containing and up to
      the second <commit>, starting at a common ancestor of both
      <commit>. "git diff A...B" is equivalent to "git diff
      $(git-merge-base A B) B". You can omit any one of <commit>, which
      has the same effect as using HEAD instead.

약간 퍼지입니다. 기본적으로 그것은 다른 지점과 비교하여 해당 지점의 차이만을 보여줍니다. 그것은 당신이 준 첫 번째위원회와의 마지막 공통 커밋을 찾은 다음 두 번째위원회와 차이를 찾습니다. 이 지점과 비교하여 해당 지점에서 어떤 변화가 이루어 지는지,이 지점의 변경 사항을 알지 못하는 쉬운 방법입니다.

그만큼 .. 다소 단순합니다 git-diff 케이스, 그것은 a와 동일합니다 git diff A B 그리고 단지 B에 비해 a log 사례, 그것은 B에 있지만 A에서는 모든 커밋을 보여줍니다.

다른 팁

git 로그와 함께 커밋 범위를 사용합니다

커밋 범위를 사용할 때 .. 그리고 ... ~와 함께 git log, 그들 사이의 차이점은 분기 a와 b,

git log A..B

당신을 보여줄 것입니다 B가있는 모든 커밋은 A가, 동안

git log A...B

당신을 보여줄 것입니다 둘 다 A가 가지고있는 커밋과 B가 가지고 있지 않으며 B가있는 커밋은 A가 가지고 있지 않거나 다시 말해서, 그것은 A와 B가 모두 공유하는 모든 커밋을 걸러 내며, 따라서 커밋 만 보여줍니다. ~하지 않다 둘 다 공유.

벤 다이어그램 및 커밋 트리로 시각화

다음은 시각적 표현입니다 git log A..B. B 지점 B가 포함되어 있지 않은 커밋은 Commit 범위에 의해 반환되며 Venn 다이어그램에서 빨간색으로 강조 표시되고 커밋 트리에서 파란색으로 선발됩니다.

 "git log A..B" diagramTree 1

이것들은 다이어그램입니다 git log A...B. 커밋이 그럴 것입니다 공유 두 가지 모두에 의해 명령에 의해 반환되지 않습니다.

 "git log A...B" diagramTree 2

트리플 도트 커밋 범위 만들기 ... 더 유용한

트리플 도트 커밋 범위를 만들 수 있습니다 ... 로그 명령에서 더 유용합니다 --left-right 어떤 커밋이 어떤 지점에 속하는지를 보여주는 옵션 :

$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt

위의 출력에서는 master 접두사가 있습니다 <, 소속 된 동안 origin/master 접두사가 있습니다 >.

git diff와 함께 커밋 범위를 사용합니다

언젠가 나는 커밋 범위가 어떻게 작동하는지에 대한 내 자신의 설명을 추가 할 수 있습니다. git diff, 그러나 지금은 체크 아웃하고 싶을 수도 있습니다. Git Diff Commit Ranges에서 Double-Dot ".."및 Triple-Dot "..."의 차이점은 무엇입니까?.

또한보십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top