두 개의 Git 커밋간에 변경된 모든 파일 목록을 얻는 방법은 무엇입니까?
관료주의로 인해 보고서를 위해 저장소에 변경된 모든 파일 목록을 가져와야합니다 (기존 소스 코드로 시작).
이 목록을 얻으려면 어떻게해야합니까?
지정된 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
또는 (추적되지 않은 파일을 포함하여 조금 더 자세한 정보를 위해) :
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
가장 오래된 것부터 최신 것까지 정렬하려면 :
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'
예를 들면 다음과 같습니다.
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
이제 가장 오래된 것부터 가장 최근에 이르는 수정 사항을 검토 할 수 있습니다.
두 커밋 사이에 내용이 변경된 파일 목록이 필요하므로 (추가 또는 수정 만) 다음과 같이 사용했습니다.
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
....
함께 git show
사용하면 비슷한 결과를 얻을 수 있습니다. git log
포함 된 파일 목록이 있는 커밋 ( 보기에 보이는 것처럼)을 보려면 다음을 사용하십시오.
git show --name-only [commit-id_A]^..[commit-id_B]
[commit-id_A]
초기 커밋은 어디에 있고 [commit-id_B]
표시하려는 것보다 마지막 커밋입니다.
특별한주의 와 ^
기호. 이를 넣지 않으면 commit-id_A 정보가 배포되지 않습니다.
변경된 파일을 확인하려면 변경 한 파일 중 어떤 것이 변경되었는지 확인하려는 경우와 같이 사용하기 가장 좋은 작은 것들을 처리해야합니다.
git status -- it will show the files with changes
then if you want to know what changes are to be made it can be checked in ways ,
git diff -- will show all the changes in all files
it is good only when only one file is modified
and if you want to check particular file then use
git diff
'development' 카테고리의 다른 글
여기에 "Access-Control-Allow-Origin에서 원본을 사용할 수 없습니다"오류가 표시되는 이유는 무엇입니까? (0) | 2020.06.10 |
---|---|
객체 메모리 주소 접근 (0) | 2020.06.10 |
Visual Studio Code 설정을 내보내는 방법? (0) | 2020.06.10 |
Java Generic 메소드를 정적으로 만드는 방법은 무엇입니까? (0) | 2020.06.10 |
define_method에 인수를 어떻게 전달합니까? (0) | 2020.06.10 |