두 커밋 사이에서 변경된 파일 이름 만 나열하는 방법은 무엇입니까?


답변:


2662
git diff --name-only SHA1 SHA2

커밋을 식별하기에 충분한 SHA 만 포함하면됩니다. 예를 들어

git diff --name-only HEAD~10 HEAD~5

10 번째 최신 커밋과 5 번째 최신 커밋의 차이점을 확인하십시오.


151
이것은 git show에서도 작동합니다. git show --name-only SHA1.
August Lilleaas

78
git diff --name-status [TAG|SHA1]어떤 작업을 보여줍니다 너무 파일에 수행 한
reconbot

2
git diff --name-only HEAD @ {3} HEAD @ {0}도 비교할 정확한 커밋에 대해 수행 할 수 있습니다.
b01

7
@AugustLilleaas 실제로 show를 사용하면 2 개의 특정 커밋 만 표시됩니다. 2 개 사이에 커밋이 있으면 생략됩니다.
chrisan

4
아래에 언급했듯이 git diff --name-status추가 된 파일을 표시하지 않으려는 것 같습니다. @ sschuberth 지적 git show, 그것은 제대로 작동하는 것 같습니다 : git show --pretty=format: --name-status. 그냥 git show --name-status좀 더 많은 정보를 제공하지만, 여전히 멋지고 조밀 한 ... 그것은 나의 새로운 goto 명령이 될 것입니다;)
travc

416
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는 병합 - 병합 후 파일 충돌


git diff --name-status라고 말하면 '추가 된 파일'을 제공했습니다.
aartist

1
git log의 경우 SHA1..SHA2와 같이 SHA 사이에 두 개의 점이 있어야하며 두 번째 SHA는 선택 사항이 아니므로 git log --name-status --oneline [SHA1 .. SHA2]
twasbrillig 1

특정 파일 / 일부 파일 형식을 제외하는 방법이 있습니까?
aug

3
--relative[=<path>]옵션은 잘 모르겠어요, 당신이 도움이 될 수 있습니다. 그렇지 않으면 항상있다 | erep -v '(.tmp|.foo|.dontwant)$'...
artfulrobot

80

아무도 스위치를 언급하지 않은 것 같습니다 --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

$ 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(-)

4
허용되는 답변은 정확하지만 이것은 매우 유용하며 약간의 추가 정보를 제공합니다. 감사!
kontur

2
diff 통계가 포함되어 있기 때문에 더 유용한 답변이라고 동의했습니다.
internetross

52

그러나 브랜치와 공통 브랜치 사이에서 다른 브랜치 (예 : 출발지 / 마스터)와 파일이 변경된 것을 보려면 다음을 수행하십시오.

git diff --name-only `git merge-base origin/master HEAD`

1
이것은 정말 유용했습니다! git diffstatus master위와 같은 말을 하거나 비슷한 말을 할 수 있기를 바랍니다 .
oma

3
또는 git show --pretty=format: --name-only origin/master...
sschuberth

git 별칭으로 만들 수는 없지만 .bashrc에 넣을 수는 있습니다.
Fred

3
또는 더 간단합니다. git diff --name-only HEAD...master(세 개의 점에 유의하십시오). 자세한 설명은 여기를 참조 하십시오 .
ostrokach

1
대부분 정답 인 것 같습니다! 단순 git diff --name-only master..branch이 github PR 목록에 해당하지 않습니다. 이 방법이 더 정확합니다. 그러나 어쨌든 나는 github PR에서 173 개의 chaned 파일 대 171을 가지고 있습니다. ( merge-base내가 228 대 171이 없음)
x'ES

21

두 분기 사이에서 변경된 파일을 표시하려면 @artfulrobot의 답변을 보완하십시오.

git diff --name-status mybranch..myotherbranch

우선 순위에주의하십시오. 최신 분기를 먼저 배치하면 파일이 추가되지 않고 삭제 된 것으로 표시됩니다.

를 추가하면 grep더 구체화 할 수 있습니다.

git diff --name-status mybranch..myotherbranch | grep "A\t"

그러면에 추가 된 파일 만 표시됩니다 myotherbranch.


4
정규 표현식은 실제로 거의 모든 작업을 수행 할 수 있습니다. 그러나이 경우 --diff-filter기본적으로이 기능을 제공하는 잘못된 결과 (예 : 오 탐지)를 줄일 수있는 기능 도 있습니다.
Jasper

8

아래에 별칭을 추가 ~/.bash_profile한 다음 실행하십시오. source ~/.bash_profile; 이제 마지막 커밋에서 업데이트 된 파일을 볼 필요가있을 때마다 showfilesgit 저장소에서 실행 하십시오.

alias showfiles='git show --pretty="format:" --name-only'

2
또는 git config --global alias.showfiles 'show --pretty="format:" --name-only'만들기 위해 git showfiles.
cgmb


5

또한 마지막 커밋과 이전 커밋 사이의 변경된 파일을보고 싶다면 참고하십시오. 이것은 잘 작동합니다 :git show --name-only


3

자식 로그 사용 --pretty = oneline> C : \ filename.log

변경된 파일의 이름 인 한 줄 (--pretty = oneline) 만 기록합니다. 또한 모든 세부 사항을 출력 파일에 기록합니다.


git log --pretty=oneline단지 SHA 저를 제공하고,이 자식 2.10.1 사용하여 메시지 커밋
DAMD

3

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

3

Java 파일에만 집중 해야하는 사람에게만 이것이 내 솔루션입니다.

 git diff --name-status SHA1 SHA2 | grep '\.java$'

1

다음은 나를 위해 잘 작동합니다.

$ git show --name-only --format=tformat: SHA1..SHA2

단일 커밋과 함께 사용할 수도 있습니다.

git show --name-only --format=tformat: SHA1

변경 목록 SHA가 제공되는 Jenkins에서 사용하기에 편리하며 변경된 파일을 확인하기 위해 반복합니다.

이것은 위의 두 가지 대답과 비슷하지만 커밋 사이의 구분 기호 공간을 제거하는 tformat:대신 사용 format:하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.