program story

마지막으로 가져온 이후 변경된 사항에 대한 git diff를 생성하려면 어떻게해야합니까?

inputbox 2020. 11. 5. 07:58
반응형

마지막으로 가져온 이후 변경된 사항에 대한 git diff를 생성하려면 어떻게해야합니까?


가급적이면 레이크에서 다음 작업을 단일 명령으로 스크립팅하고 싶습니다.

  1. 내 로컬 git 저장소의 버전을 가져옵니다.
  2. Git은 최신 코드를 가져옵니다.
  3. Git은 1 단계에서 추출한 버전과 현재 내 로컬 저장소에있는 버전을 비교합니다.

즉, 중앙 저장소에서 최신 코드를 가져 와서 마지막으로 가져온 이후 변경된 내용의 차이점을 즉시 생성하고 싶습니다.


refspec을 사용하면 상당히 간단하게이 작업을 수행 할 수 있습니다.

git pull origin
git diff @{1}..

그러면 풀 전후에 존재했던 현재 브랜치의 차이점을 알 수 있습니다. 풀이 실제로 현재 분기를 업데이트하지 않으면 diff가 잘못된 결과를 제공합니다. 또 다른 옵션은 현재 버전을 명시 적으로 기록하는 것입니다.

current=`git rev-parse HEAD`
git pull origin
git diff $current..

저는 개인적으로 로그를 역순으로 (즉, 가장 오래된 것에서 최신으로) 표시하는 별칭을 사용합니다. 마지막 풀 이후의 모든 커밋에 대한 병합이 없습니다. 풀이 브랜치를 업데이트 할 때마다 이것을 실행합니다.

git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..

Greg의 방식이 작동해야합니다 (나가 아니라 다른 Greg : P). 의견과 관련하여 origin은 중앙 저장소를 로컬 시스템에 복제 할 때 Git에서 설정하는 구성 변수입니다. 기본적으로 Git 저장소는 출처를 기억합니다. 그러나 git-config를 사용해야하는 경우 이러한 변수를 수동으로 설정할 수 있습니다.

git config remote.origin.url <url>

여기서 url은 중앙 저장소의 원격 경로입니다.

다음은 작동해야하는 배치 파일의 예입니다 (테스트하지 않았습니다).

@ECHO off

:: Retrieve the changes, but don't merge them.
git fetch

:: Look at the new changes
git diff ...origin

:: Ask if you want to merge the new changes into HEAD
set /p PULL=Do you wish to pull the changes? (Y/N)
IF /I %PULL%==Y git pull

이것은 git의 브랜치에서 변경 사항을 얻는 방법에 대해 묻는 질문과 매우 유사합니다 . 두 개의 점과 세 개의 점을 사용할 때 git diff와 git log의 동작이 일관되지 않습니다. 그러나 응용 프로그램의 경우 다음을 사용할 수 있습니다.

git fetch
git diff ...origin

그 후, git pull변경 사항을 HEAD에 병합합니다.


이것을 bash 프로필에 넣으면 grin (git 원격 수신) 및 grout (git 원격 발신)을 실행하여 origin master에 대해 수신 및 발신되는 커밋의 차이를 확인할 수 있습니다.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
function gd2 { 
 echo branch \($1\) has these commits and \($2\) does not 
 git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}
function grin {
 git fetch origin master
 gd2 FETCH_HEAD $(parse_git_branch)
}
function grout {
 git fetch origin master
 gd2 $(parse_git_branch) FETCH_HEAD
}

참고 URL : https://stackoverflow.com/questions/61002/how-can-i-generate-a-git-diff-of-whats-changed-since-the-last-time-i-pulled

반응형