Programing

Git의 브랜치에서 변경 사항을 얻는 방법

lottogame 2020. 4. 4. 10:12
반응형

Git의 브랜치에서 변경 사항을 얻는 방법


현재 브랜치에서 브랜치 된 이후 브랜치에서 커밋 로그를 얻는 가장 좋은 방법은 무엇입니까? 지금까지 내 해결책은 다음과 같습니다.

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

에 대한 문서 자식-DIFF는 그 표시 git diff A...B에 해당합니다 git diff $(git-merge-base A B) B. 한편, 설명서 자식-REV-구문 분석은 그가 표시 r1...r2로 정의된다 r1 r2 --not $(git merge-base --all r1 r2).

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

사진에서 다음과 같이 가정하십시오.

         x --- y --- z --- 분기
        /
--- a --- b --- c --- d --- e --- 머리

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

  • git diff HEAD...branch 이 커밋을 제공합니다
  • 그러나 git log HEAD...branchx, 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 HEADHEAD에 있지 않은 모든 커밋을 의미합니다.


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 branch outgoing
  • gbin-자식 분기 수신

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

  • 마스터 인 경우 : gbin branch1 <-이것은 master가 아닌 branch1에있는 것을 보여줍니다.
  • 마스터 인 경우 : gbout branch1 <-분기 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하지만, 이것은 질문으로 지정된 커밋이 아니라 diff를 보여줍니다.


파일 변경 사항을 보려면 거기에 -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>

커밋 메시지뿐만 아니라 전체 diff를 얻으므로 더 유용합니다. 이미 지사에 있고 변경 사항을보고 싶은 경우 (예를 들어) 마스터에 변경된 사항을보고 싶은 경우 다음을 사용할 수 있습니다.

git diff HEAD master

참고 URL : https://stackoverflow.com/questions/53569/how-to-get-the-changes-on-a-branch-in-git

반응형