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...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 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
'Programing' 카테고리의 다른 글
거꾸로 작성된이 코드가“Hello World!”를 인쇄하는 이유는 무엇입니까? (0) | 2020.04.04 |
---|---|
XML에서 '독립형'지시문의 의미는 무엇입니까? (0) | 2020.04.04 |
유효한 SSL 인증서는 어디서 구입할 수 있습니까? (0) | 2020.04.04 |
단위 테스트를위한 NUnit 대 Visual Studio 2008의 테스트 프로젝트? (0) | 2020.04.04 |
JSF가 게터를 여러 번 호출하는 이유 (0) | 2020.04.04 |