저장소에 커밋이 많이 있습니다. SHA1 에서 SHA2로 두 커밋 사이에 변경된 파일 목록을 보고 싶습니다.
어떤 명령어를 사용해야 하나요?
질문자 :Shawn
저장소에 커밋이 많이 있습니다. SHA1 에서 SHA2로 두 커밋 사이에 변경된 파일 목록을 보고 싶습니다.
어떤 명령어를 사용해야 하나요?
git diff --name-only SHA1 SHA2
커밋을 식별하기에 충분한 SHA 해시만 포함하면 됩니다. 예를 들어 다음을 수행할 수도 있습니다.
git diff --name-only HEAD~10 HEAD~5
10번째 최신 커밋과 5번째 최신 커밋(또는 그 정도)의 차이점을 확인합니다.
git diff --name-status [SHA1 [SHA2]]
파일에 일어난 일(수정, 삭제, 추가...)을 알려주는 간단한 접두어를 얻는다는 점을 제외하고는 --name-only와 같습니다.
git log --name-status --oneline [SHA1..SHA2]
비슷하지만 커밋 메시지 뒤에 커밋이 나열되어 파일이 변경된 시점을 확인할 수 있습니다.
특정 파일/폴더에 발생한 일에 관심이 있다면 -- <filename> [<filename>...]
을 git log
버전에 추가할 수 있습니다.
단일 커밋에 대해 어떤 일이 발생했는지 보려면 SHA1이라고 부르고 다음을 수행하십시오.
git log --name-status --oneline [SHA1^..SHA1]
파일 상태 플래그:
깃발 | 이름 | 의미 |
---|---|---|
M | 수정 | 파일이 수정되었습니다 |
C | 복사 편집 | 파일이 복사 및 수정되었습니다. |
R | 이름 바꾸기-편집 | 파일 이름이 변경되고 수정되었습니다. |
A | 추가 | 파일이 추가되었습니다 |
D | 삭제됨 | 파일이 삭제되었습니다 |
U | 병합되지 않은 | 병합 후 파일에 충돌이 있습니다. |
--stat
대해 언급하지 않은 것 같습니다.
$ git diff --stat HEAD~5 HEAD .../java/org/apache/calcite/rex/RexSimplify.java | 50 +++++++++++++++++----- .../apache/calcite/sql/fun/SqlTrimFunction.java | 2 +- .../apache/calcite/sql2rel/SqlToRelConverter.java | 16 +++++++ .../org/apache/calcite/util/SaffronProperties.java | 19 ++++---- .../org/apache/calcite/test/RexProgramTest.java | 24 +++++++++++ .../apache/calcite/test/SqlToRelConverterTest.java | 8 ++++ .../apache/calcite/test/SqlToRelConverterTest.xml | 15 +++++++ pom.xml | 2 +- .../apache/calcite/adapter/spark/SparkRules.java | 7 +-- 9 files changed, 117 insertions(+), 26 deletions(-)
--numstat도 --numstat
$ git diff --numstat HEAD~5 HEAD 40 10 core/src/main/java/org/apache/calcite/rex/RexSimplify.java 1 1 core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java 16 0 core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java 8 11 core/src/main/java/org/apache/calcite/util/SaffronProperties.java 24 0 core/src/test/java/org/apache/calcite/test/RexProgramTest.java 8 0 core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java 15 0 core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml 1 1 pom.xml 4 3 spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java
및 --shortstat
$ git diff --shortstat HEAD~5 HEAD 9 files changed, 117 insertions(+), 26 deletions(-)
그러나 다른 분기(예: origin/master)를 사용하여 분기와 공통 조상 간에 변경된 파일을 보려면 다음을 수행합니다.
git diff --name-only `git merge-base origin/master HEAD`
@artfulrobot의 답변을 보완하려면 두 분기 간에 변경된 파일을 표시하려면 다음을 수행하십시오.
git diff --name-status mybranch..myotherbranch
우선 주의하세요. 새 분기를 먼저 배치하면 파일이 추가되지 않고 삭제된 것으로 표시됩니다.
grep
추가하면 상황을 더욱 세분화할 수 있습니다.
git diff --name-status mybranch..myotherbranch | grep "A\t"
myotherbranch
추가된 파일만 표시됩니다.
또한 마지막 커밋과 그 이전 커밋 사이에 변경된 파일을 보려면 다음과 같이 하면 됩니다.
git show --name-only
그러면 파일의 변경 사항이 표시됩니다.
git diff --word-diff SHA1 SHA2
~/.bash_profile
파일에 아래 별칭을 추가하고 source ~/.bash_profile
을 실행하십시오. 이제 git 저장소에서 showfiles
파일에서 업데이트된 파일을 볼 필요가 있을 때마다.
alias showfiles='git show --pretty="format:" --name-only'
Java 파일에만 집중해야 하는 사람을 위한 솔루션은 다음과 같습니다.
git diff --name-status SHA1 SHA2 | grep '\.java$'
artfulrobot은 그의 대답에서 다음과 같이 말했습니다.
git diff --name-status [SHA1 [SHA2]]
내 예:
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 4b95d595812211553070046bf2ebd807c0862cca M views/layouts/default.ctp M webroot/css/theme.css A webroot/img/theme/logo.png
사용하다
git log --pretty=oneline > C:\filename.log
변경된 파일의 이름인 한 줄 --pretty=oneline
)만 기록합니다. 또한 모든 세부 정보를 출력 파일에 기록합니다.
다음은 나를 위해 잘 작동합니다.
git show --name-only --format=tformat: SHA1..SHA2
단일 커밋과 함께 사용할 수도 있습니다.
git show --name-only --format=tformat: SHA1
이는 변경 집합 SHA 해시 값 목록 이 제공되고 어떤 파일이 변경되었는지 확인하기 위해 반복하려는 Jenkins 에서 사용하기에 편리합니다.
이것은 이전의 답변을 몇 유사하지만, 사용 tformat:
보다는 format:
커밋 사이의 분리 공간을 제거합니다.
git diff --name-status
기반으로 두 경로 사이에서 변경된 사항에 대한 계층적 트리 보기를 렌더링하는 git-diffview Git 확장을 작성했습니다.
준비된 파일을 포함하여 변경된 파일 목록을 찾는 경우
git diff HEAD --name-only --relative --diff-filter=AMCR git diff HEAD --name-only --relative --diff-filter=AMCR sha-1 sha-2
절대 경로를 원하면 --relative
제거하십시오.
모든 이전 답변의 가장 큰 문제는 리포지토리에서 가져오려는 정보를 사용하려는 경우 매우 성가신 호출기에 입력된다는 것입니다. 특히 vim 명령을 배우는 대신 개발해야 하는 애플리케이션의 비즈니스 로직을 배우고자 하는 개발자라면 더욱 그렇습니다.
--no-pager를 사용하면 해당 문제가 해결됩니다.
git --no-pager diff --name-only sha1 sha2
출처 : http:www.stackoverflow.com/questions/1552340/how-to-list-only-the-names-of-files-that-changed-between-two-commits
JUnit 4 테스트에서 특정 예외가 발생했다고 어떻게 주장합니까? (2) | 2021.11.29 |
---|---|
요소별 추가가 결합된 루프보다 개별 루프에서 훨씬 빠른 이유는 무엇입니까? (0) | 2021.11.29 |
리플렉션이란 무엇이며 왜 유용한가요? (0) | 2021.11.29 |
변수가 '정의되지 않음' 또는 'null'인지 어떻게 확인할 수 있습니까? (0) | 2021.11.29 |
디렉토리가 이미 존재하지 않는 경우에만 mkdir하는 방법은 무엇입니까? (0) | 2021.11.29 |