답변:
지정된 SHA와 현재 커밋간에 변경된 파일의 경우 :
git diff --name-only <starting SHA> HEAD
또는 아직 커밋되지 않은 변경 파일을 포함하려는 경우 :
git diff --name-only <starting SHA>
보다 일반적으로 다음 구문은 두 커밋간에 변경된 파일 (SHA 또는 다른 이름으로 지정)을 항상 알려줍니다.
git diff --name-only <commit1> <commit2>
git diff --name-only <SHA> <SHA>^
--name-status
대신 플래그를 사용하면 --name-only
파일 목록을 가져와 추가 또는 수정과 같은 수정 상태를 볼 수 있습니다.
--name-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'
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
이제 가장 오래된 것부터 가장 최근에 이르는 수정 사항을 검토 할 수 있습니다.
xargs
단일 호출을 사용하지 않는 이유는 무엇 stat
입니까? 전체 원 라이너 :git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
두 커밋 사이에 내용이 변경된 파일 목록이 필요하므로 (추가 또는 수정 만) 다음과 같이 사용했습니다.
git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>
git diff 문서 와 다른 diff-filter 옵션 :
diff-filter = [(A | C | D | M | R | T | U | X | B)… [[]]
추가 된 파일 (A), 복사 된 파일 (C), 삭제 된 파일 (D), 수정 된 파일 (M), 이름이 변경된 파일 (R) 만 유형 (예 : 일반 파일, 심볼릭 링크, 하위 모듈 등)이 변경된 파일 (T)을 선택하십시오. 병합되지 않음 (U), 알 수 없음 (X) 또는 페어링 끊어짐 (B)이 있습니다. 필터 문자의 조합 (없음 포함)을 사용할 수 있습니다. * (모두 또는 없음)이 조합에 추가되면 비교에서 다른 기준과 일치하는 파일이 있으면 모든 경로가 선택됩니다. 다른 기준과 일치하는 파일이 없으면 아무것도 선택되지 않습니다.
또한이 대문자는 소문자로 제외 할 수 있습니다. 예를 들어 --diff-filter = ad는 추가 및 삭제 된 경로를 제외합니다.
상태 (예 : A / M)도 나열하려면로 변경 --name-only
하십시오 --name-status
.
다음 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
....