programing

Git의 분기에서 변경 사항을 가져오는 방법

abcjava 2023. 5. 11. 21:03
반응형

Git의 분기에서 변경 사항을 가져오는 방법

현재 분기에서 분기된 이후 분기에서 커밋 로그를 가져오는 가장 좋은 방법은 무엇입니까?지금까지의 솔루션은 다음과 같습니다.

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

git-diff에 대한 문서는 다음을 나타냅니다.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원하는 diff를 제공하지만 해당 gitlog 명령은 원하는 것 이상을 제공합니다.

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

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

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

  • git diff HEAD...branch에서는 이러한 합니다.
  • 하만지,,git log HEAD...branch는 x, .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 설명 manpage »A...B"범위 지정" 섹션에서 수정 범위가 유효한 경우(즉, 수정 목록을 원하는 경우)에만 해당 섹션의 모든 항목이 유효합니다.

x, y를 사용하십시오.git log HEAD..branch(3개가 아니라 2개의 점).은 이다음같다니습과는과 .git log branch --not 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에 없는 마스터의 내용을 보여줍니다.

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

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
}

해당 지점에 이미 있는 경우 사용

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

Git 2.30 (2021년 1분기)과 함께, "Git diff A...B(남자)"는 "git diff --merge-base AB(남자)"를 배웠는데, 이는 같은 말을 하기에는 더 짧은 손입니다.

따라서 다음을 사용하여 이 작업을 수행할 수 있습니다.git diff --merge-base <branch> HEAD이 값은 다음과 같아야 합니다.git diff <branch>...HEAD거리 측정기를 사용해야 하는 혼란 없이 말입니다.

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

반응형