문제

현재 브랜치에서 분기된 이후 브랜치에 대한 커밋 로그를 얻는 가장 좋은 방법은 무엇입니까?지금까지 내 솔루션은 다음과 같습니다.

git log $(git merge-base HEAD branch)..branch

에 대한 문서 자식 비교 것을 나타냅니다 git diff A...B 는 다음과 같습니다 git diff $(git-merge-base A B) B.반면에 대한 문서는 git-rev-parse 것을 나타냅니다 r1...r2 다음과 같이 정의됩니다. r1 r2 --not $(git merge-base --all r1 r2).

이것들은 왜 다른가요?참고하세요 git diff HEAD...branch 내가 원하는 차이점을 제공하지만 해당 git log 명령은 내가 원하는 것보다 더 많은 것을 제공합니다.

그림에서는 다음과 같이 가정합니다.

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

x, y, z 커밋이 포함된 로그를 얻고 싶습니다.

  • git diff HEAD...branch 이러한 커밋을 제공합니다
  • 하지만, git log HEAD...branch x, y, z, c, d, e를 제공합니다.
도움이 되었습니까?

해결책

개정 목록의 맥락에서, A...B 난 ~ 보여준다 git-rev-parse 그것을 정의합니다.git-log는 개정 목록을 가져옵니다. git-diff 개정 목록을 사용하지 않습니다. 하나 또는 두 개의 개정을 취하고 A...B 구문은 그것이 정의된 방식을 의미합니다. git-diff 맨페이지.만약에 git-diff 명시적으로 정의하지 않았습니다 A...B, 이면 해당 구문은 유효하지 않습니다.참고 git-rev-parse 맨페이지 설명 A...B "범위 지정" 섹션에 있으며 해당 섹션의 모든 내용은 개정 범위가 유효한 상황에서만 유효합니다(예:개정 목록이 필요한 경우).

x, y, z만 포함된 로그를 얻으려면 다음을 시도하십시오. git log HEAD..branch (3개가 아닌 2개의 점)이는 다음과 동일합니다. git log branch --not HEAD, HEAD에 없는 브랜치의 모든 커밋을 의미합니다.

다른 팁

git cherry branch [newbranch]

당신이 있는 동안 당신이 요구하는 것을 정확히 수행합니다. master 나뭇가지.

나는 또한 다음을 매우 좋아합니다.

git diff --name-status branch [newbranch]

정확히 당신이 요구하는 것은 아니지만 같은 맥락에서 여전히 매우 유용합니다.

보고 싶은 것은 나가는 커밋 목록입니다.다음을 사용하여 이 작업을 수행할 수 있습니다.

git log master..branchName 

또는

git log master..branchName --oneline

여기서는 "branchName"이 "master"의 추적 분기로 생성되었다고 가정합니다.

마찬가지로, 들어오는 변경 사항을 보려면 다음을 사용할 수 있습니다.

git log branchName..master

이것은 내가 게시한 답변과 유사합니다. Git 푸시 미리보기

Bash 프로필에 다음 기능을 추가하세요.

  • gbout - git 브랜치 발신
  • gbin - git 브랜치 수신

다음과 같이 사용할 수 있습니다.

  • 마스터인 경우:gbin branch1 <- 이것은 당신에게 branch1에있는 것을 보여줄 것입니다.
  • 마스터인 경우:gbout branch1 <- 이것은 분기 1에없는 마스터의 내용을 보여줄 것입니다 1

이것은 모든 지점에서 작동합니다.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

Alex V 및 NDavis와 같은 여러 답변과 유사하지만 어느 것도 동일하지 않습니다.

해당 지점에 이미 있는 경우

사용:

git diff master...

여러 기능을 결합합니다.

  • 엄청 짧다
  • 실제 변화를 보여줍니다

업데이트:

아마도 git diff master, 그러나 이것은 지정된 질문에 따른 커밋이 아닌 차이점을 보여줍니다.

일부 파일 변경 사항을 보려면 거기에 -p를 던져보세요.

git log -p master..branch

별칭을 만드십시오.

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

브랜치의 고유한 커밋을 확인하세요.

gbl

마스터 분기 이후 현재 분기의 로그를 보려면 다음을 수행하세요.

git log master...

현재 마스터에 있는 경우 마스터에서 분기된 이후 다른 분기의 로그를 보려면 다음을 수행하세요.

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(점 3개) 하지만 가끔 '=' 대신 '+'가 표시되는 경우도 있습니다.

나는 찾았다

git diff <branch_with_changes> <branch_to_compare_to>

커밋 메시지뿐만 아니라 전체 차이점도 얻을 수 있으므로 더 유용합니다.이미 브랜치에 있고 마스터의 변경 사항을 확인하고 싶은 경우(예를 들어) 마스터의 변경 사항을 확인하려면 다음을 사용할 수 있습니다.

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