programing

두 Git 커밋 간에 변경된 모든 파일의 목록을 가져오는 방법은 무엇입니까?

bestprogram 2023. 7. 1. 09:05

두 Git 커밋 간에 변경된 모든 파일의 목록을 가져오는 방법은 무엇입니까?

관료주의 때문에 보고서를 작성하려면 저장소의 모든 변경된 파일 목록을 가져와야 합니다(기존 소스 코드로 시작했습니다).

이 목록을 얻으려면 무엇을 실행해야 합니까?

지정된 SHA와 현재 커밋 간에 변경된 파일의 경우:

git diff --name-only <starting SHA> HEAD

또는 변경되었지만 아직 변경되지 않은 파일을 포함하려는 경우:

git diff --name-only <starting SHA>

일반적으로 다음 구문은 항상 두 커밋(SHA 또는 다른 이름으로 지정됨) 간에 변경된 파일을 알려줍니다.

git diff --name-only <commit1> <commit2>

용사를 합니다.--name-status--name-only파일에 발생한 내용과 이름이 표시됩니다.

마지막 커밋 이후 수정된 모든 파일의 이름을 찾으려면 다음과 같이 하십시오.

git diff --name-only

또는 (추적되지 않은 파일을 포함한 조금 더 자세한 정보를 보려면):

git status
  • 단계별로 추적되지 않은 모든 변경된 파일을 나열하는 방법

    git diff --name-only
    
  • 모든 단계별 추적된 변경된 파일을 나열하는 방법

    git diff --name-only --staged
    
  • 모든 스테이징 및 스테이징되지 않은 추적된 변경된 파일을 나열하는 방법

    { git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
    
  • 추적되지 않은 모든 파일(에 의해 나열된 파일)을 나열하려면 다음과 같이 하십시오.git status따라서 무시된 파일은 포함하지 않습니다):

    git ls-files --other --exclude-standard
    

스크립트에서이내용이 있는지 방식으로 셸스크에서이사경이반우내있명프는로확면방밍래려하인식로으그지용에 이 있습니다.git diff--exit-code선택.

마지막으로 커밋한 이후로 많은 파일을 추가/수정/삭제한 경우 이러한 수정 사항을 시간순으로 보고 싶습니다.

사용하는 용도:

  • 준비되지 않은 모든 파일을 나열하는 방법

    git ls-files --other --modified --exclude-standard
    
  • 각 파일의 마지막 수정 날짜를 가져오는 방법

    while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done
    

비록 루빔이 논평에서 제안하지만,

xargs -0 stat -c '%y %n' -- 
  • 오래된 항목에서 최신 항목으로 정렬하려면 다음과 같이 하십시오.

    sort
    

별칭을 사용하면 다음을 더 쉽게 사용할 수 있습니다.

alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done|sort'

또는 (ruvim 덕분에 더 짧고 효율적입니다.)

alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'

예:

username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd

이제 가장 오래된 것부터 가장 최근의 것까지 수정 사항을 검토할 수 있습니다.

된 파일 됨, 커사추내변파경됨필다목니요합록이일만된가두이밋에용이추▁that,됨(▁of▁i▁list▁had가두▁(만▁two▁between▁added▁contentonly▁files▁commits,다니▁a▁changed,A수정됨, 또는수됨정,,M), 그래서 다음을 사용했습니다.

git diff --name-only --diff-filter=AM <from_commit_hash> <to_commit_hash>

다른 점은 다음과 같습니다.--diff-filterGit diff 설명서의 옵션(참고 항목)man git diff):

--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

합니다(가된파선택추만일(A됨, 복됨사()C 삭제됨()D 수정됨()M , , , 로 이름이 바뀌었습니다.R 일반 파일, 링크,합니다. ( ), 유예형 (을 : 일파일링, 볼등모크, 듈하위다)T )는병합되지 않은 상태()입니다.U), 알수 없음(), 알 수 없음()입니다X), 깨진 (), 또는 짝이 경우B의할 수 필터 문자(없음 포함)의 모든 조합을 사용할 수 있습니다.*(All-or-none)이 조합에 추가되고, 비교에서 다른 기준과 일치하는 파일이 있으면 모든 경로가 선택되고, 다른 기준과 일치하는 파일이 없으면 아무것도 선택되지 않습니다.

또한 이러한 대문자는 소문자로 구분하여 제외할 수 있습니다.예.--diff-filter=ad추가 및 삭제된 경로를 제외합니다.

모든 디프가 모든 유형을 특징으로 할 수 있는 것은 아닙니다.예를 들어, 인덱스에서 작업 트리까지의 diff는 절대 Added 항목을 가질 수 없습니다(diff에 포함된 경로 집합이 인덱스에 있는 항목에 의해 제한되기 때문입니다).마찬가지로 복사되거나 이름이 바뀐 항목은 해당 유형에 대한 탐지가 비활성화된 경우 표시될 수 없습니다.

상태도 나열하려는 경우(예:A/M), 변경--name-only로.--name-status:

git diff --name-status --diff-filter=AM <from_commit_hash> <to_commit_hash>

와 함께git show비슷한 결과를 얻을 수 있습니다.커밋을 확인합니다(확인하는 것처럼).git logview)에 포함된 파일 목록에서 다음을 사용합니다.

git show --name-only [commit-id_A]^..[commit-id_B]

어디에[commit-id_A]초기 커밋이고[commit-id_B]보여주고 싶은 것보다 마지막 커밋입니다.

에 대한 특별한 주의^기호.이를 입력하지 않으면 commit-id_A 정보가 배포되지 않습니다.

단계별 수정되지 않은 목록은 다음을 사용하여 얻을 수 있습니다.git status그리고grep아래와 같은 명령입니다.비슷한 것git status -s | grep M:

root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
 M src/.../file1.js
 M src/.../file2.js
 M src/.../file3.js
 ....

수정된 파일 목록을 가져와 일부 텍스트 파일에 저장하는 가장 간단한 방법은 다음과 같습니다.

git diff --name-only HEAD^ > modified_files.txt

변경된 파일을 확인하려면 어떤 파일이 변경되었는지 확인하는 것과 같이 사용하기에 가장 좋은 여러 가지 작은 것들을 관리해야 합니다.

git 상태 - 변경 사항이 있는 파일을 표시합니다.

그러면 어떤 변경을 해야 하는지 알고 싶다면, 그것은 여러 가지 방법으로 확인할 수 있습니다.

gitdiff - 모든 파일의 모든 변경 사항을 표시합니다.

하나의 파일만 수정할 때만 좋습니다.

그리고 특정 파일을 확인하고 싶다면 다음을 사용합니다.

약간의 차이가 있는

유형(pull_request 또는 merge to master)에 따라 GitHub Actions에서 작동하는 일부 필터는 다음과 같습니다.

git --no-pager diff --name-only --diff-filter=ACMRT ${{github.event.pull_request.base.sha}} ${{ github.event.pull_request.head.sha }}
git --no-pager diff --name-only --diff-filter=ACMRT ${{github.event.pull_request.base.sha}} ${{github.sha}}
git log -m -1 --name-only --pretty="format:" ${{ github.sha }}

이것들을 사용해 보시고 어떤 것이 당신의 요구에 맞는지 보세요.

언급URL : https://stackoverflow.com/questions/5096268/how-to-get-a-list-of-all-files-that-changed-between-two-git-commits