svn log -v와 같은 git log show 파일 이름을 만드는 방법


987

SVN의 로그에는 다음과 같이 각 커밋에서 변경된 파일의 파일 이름을 출력하는 "-v"모드가 있습니다.

jes5199 $ svn log -v
-------------------------------------------------- ----------------------
r1 | jes5199 | 2007-01-03 14:39:41 -0800 (2007 년 1 월 3 일 (수)) | 1 줄
변경된 경로 :
   / 오토 르
   / 복사
   / 변경 로그
   / 진화
   / INSTALL
   / MacOSX

git의 커밋마다 변경된 파일 목록을 얻는 빠른 방법이 있습니까?


15
왜 많은 사람들이 예상 / 원치 git log않는 -v스위치를 지원하지 않는가 ? </ gripe>
MarkHu

답변:


1528

변경된 파일의 전체 경로 이름 :

git log --name-only

전체 경로 이름 및 변경된 파일 상태 :

git log --name-status

약식 경로 이름과 변경된 파일의 차이점 :

git log --stat

더 많은 옵션이 있습니다 . docs를 확인하십시오 .


17
사용 git log --numstat합니다. git help log더 많은 옵션을 참조하십시오 .
ma11hew28

29
git log --name-only --oneline커밋을위한 한 줄의 컬러 라인과 한 줄에 하나의 파일이 있습니다. stackoverflow.com/a/14227496/1995714
cp.engr

4
git 2.7.3에서는 git log --name-status --find-renames추가 + 삭제 대신 이름이 바뀐 파일을 표시 하기 위해 사용해야 했습니다.
수잔 듀 페론

1
--stat긴 경로 를 축약합니다. 너비는 구성 가능하지만 랩핑 된 히스토그램은 읽기가 어렵습니다. 다른 형식은 --numstat항상 전체 경로를 인쇄합니다.
Beni Cherniavsky-Paskin

@ ma11hew28 감사합니다. --numstatgit 2.22.00 기준으로 해당 매뉴얼 페이지의 946 행에 있습니다. 그것은 대부분의 사람들이 필요로하는 것보다 훨씬 더 많은 옵션입니다.
복 직원 모니카

139

참고 : 더 이상 사용되지 않습니다. 대신 사용하십시오. git whatchangedgit log

새로운 사용자는 대신 git-log [1]를 사용하는 것이 좋습니다. 이 whatchanged명령은 기본적으로 git-log [1] 과 동일 하지만 기본적으로 원시 형식 diff 출력을 표시하고 병합을 건너 뛰도록 기본 설정되어 있습니다.

명령은 주로 역사적 이유로 유지됩니다. git log리눅스 커널 메일 링리스트를 읽어서 오래 전에 Git을 배운 많은 사람들의 손가락이 그것을 입력하도록 훈련 받았다.


이 명령 git whatchanged --stat을 사용 하여 커밋 메시지와 함께 각 커밋에서 변경된 파일 목록을 얻을 수 있습니다 .

참고 문헌


50

git show 또한 훌륭한 명령입니다.

그것은 일종의 비슷 svn diff하지만 커밋 guid를 전달하고 그 차이점을 볼 수 있습니다.


46

나머지 커밋 메시지없이 파일 이름 만 가져 오려면 다음을 사용할 수 있습니다.

git log --name-only --pretty=format: <branch name>

그런 다음 파일 이름이 포함 된 다양한 옵션을 사용하도록 확장 할 수 있습니다.

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

이 방법을 사용할 때주의해야 할 점은 출력에 무시해야 할 빈 줄이 있다는 것입니다. 로컬 브랜치에서 변경된 파일을보고 싶지만 아직 원격 브랜치로 푸시되지 않았으며 원격에서 최신 버전을 이미 가져 왔다는 보장이없는 경우이 기능을 사용하면 유용 할 수 있습니다. :

git log --name-only --pretty=format: my_local_branch --not origin/master

로컬 분기에서 변경되었지만 아직 원격의 마스터 분기에 병합되지 않은 모든 파일을 표시합니다.


1
위의 예에서 공백에 대한 참고 사항은 다음과 같습니다 git log --stat --pretty="format:" $branchName. 예를 들어 git log --stat --pretty="format:" $(git rev-parse --abbrev-ref HEAD). 내가 여기에있는 동안, 여기 내 목적과 관련이있는 정확한 주문이 있습니다 :git log --name-only --pretty="format: " master..$(git rev-parse --abbrev-ref HEAD)
driftcatcher

41

나는 이것을 매일 사용하여 변경된 파일로 기록을 보여줍니다.

git log --stat --pretty=short --graph

짧게 유지하려면 다음 .gitconfig을 수행 하여 별칭을 추가하십시오 .

git config --global alias.ls 'log --stat --pretty=short --graph'

내 것은 git log --pretty = oneline --graph --name-status에 매우 가깝습니다. 변경된 파일 목록을 표시하는 것이 더 간결합니다.
Peter Suwara

15

나는 이것을 사용한다 :

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

파일 목록과 상태 (추가, 수정, 삭제) 만 출력합니다.

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...

7

git diff --stat HEAD^!마지막 커밋 ( HEAD)에 대해 변경된 파일과 추가 / 제거 된 줄 수를 표시합니다 .

필자는 파일 이름으로 만 구성된 간결한 출력을 얻고 한 번에 여러 커밋에 대한 행 수를 추가 및 제거하는 단일 명령이없는 것 같습니다.

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

예를 들어 ./changed_files 99에서 간결한 형태의 변화를 얻을 수 있습니다 HEADHEAD~99. 예를 들어 배관 할 수 있습니다. 에 less.


git diff --stat HEAD..masterHEAD와 마스터의 차이를 보여줄 수 없습니까 , 아니면 2012 년에 답변을 게시했을 때 존재하지 않았습니까?
Ferrybig

1
@Ferrybig OP의 질문은 방법에 관한 것입니다 "각 커밋에서 변경된 파일의 목록을 얻을" 하지에 대해, 사랑하는 사이 HEADmaster. 그것들은 서로 다른 두 가지입니다.
nrz

4

다음은 커밋 당 변경된 파일을 간결한 형식으로 나열하는 데 이상적인 표시입니다.

git log --pretty=oneline --graph --name-status

3

예제 출력이 포함 된 답변 요약

5 개의 간단한 커밋이있는 로컬 리포지토리를 사용하고 있습니다.

‣ git log --name-only
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

file2
file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

file1
file2
file3


‣ git log --name-status
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

R100    file4   file5

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

M       file1

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

M       file2
D       file3

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

A       file4

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

A       file1
A       file2
A       file3


‣ git log --stat
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:36:32 2019 -0700

    foo file1

    really important to foo before the bar

 file1 | 3 +++
 1 file changed, 3 insertions(+)

commit 1b6413400b5a6a96d062a7c13109e6325e081c85
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:34:37 2019 -0700

    foobar file2, rm file3

 file2 | 1 +
 file3 | 0
 2 files changed, 1 insertion(+)

commit e0dd02ce23977c782987a206236da5ab784543cc
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:33:05 2019 -0700

    Add file4

 file4 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)

commit b58e85692f711d402bae4ca606d3d2262bb76cf1
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:32:41 2019 -0700

    Added files

 file1 | 0
 file2 | 0
 file3 | 0
 3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --oneline
ed080bc (HEAD -> master) mv file4 to file5
file5
5c4e8cf foo file1
file1
1b64134 foobar file2, rm file3
file2
file3
e0dd02c Add file4
file4
b58e856 Added files
file1
file2
file3


‣ git log --pretty=oneline --graph --name-status
* ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master) mv file4 to file5
| R100  file4   file5
* 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328 foo file1
| M     file1
* 1b6413400b5a6a96d062a7c13109e6325e081c85 foobar file2, rm file3
| M     file2
| D     file3
* e0dd02ce23977c782987a206236da5ab784543cc Add file4
| A     file4
* b58e85692f711d402bae4ca606d3d2262bb76cf1 Added files
  A     file1
  A     file2
  A     file3


‣ git diff-tree HEAD
ed080bc88b7bf0c5125e093a26549f3755f7ae74
:100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D  file4
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A  file5


‣ git log --stat --pretty=short --graph
* commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
| Author: My Name <user@email.com>
| 
|     mv file4 to file5
| 
|  file4 => file5 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit 5c4e8cfbe3554fe3d7d99b5ae4ba381fa1cdb328
| Author: My Name <user@email.com>
| 
|     foo file1
| 
|  file1 | 3 +++
|  1 file changed, 3 insertions(+)
| 
* commit 1b6413400b5a6a96d062a7c13109e6325e081c85
| Author: My Name <user@email.com>
| 
|     foobar file2, rm file3
| 
|  file2 | 1 +
|  file3 | 0
|  2 files changed, 1 insertion(+)
| 
* commit e0dd02ce23977c782987a206236da5ab784543cc
| Author: My Name <user@email.com>
| 
|     Add file4
| 
|  file4 | 0
|  1 file changed, 0 insertions(+), 0 deletions(-)
| 
* commit b58e85692f711d402bae4ca606d3d2262bb76cf1
  Author: My Name <user@email.com>

      Added files

   file1 | 0
   file2 | 0
   file3 | 0
   3 files changed, 0 insertions(+), 0 deletions(-)


‣ git log --name-only --pretty=format:
file5

file1

file2
file3

file4

file1
file2
file3


‣ git log --name-status --pretty=format:
R100    file4   file5

M       file1

M       file2
D       file3

A       file4

A       file1
A       file2
A       file3


‣ git diff --stat 'HEAD^!'
 file4 => file5 | 0
 1 file changed, 0 insertions(+), 0 deletions(-)


‣ git show
commit ed080bc88b7bf0c5125e093a26549f3755f7ae74 (HEAD -> master)
Author: My Name <user@email.com>
Date:   Mon Oct 21 15:46:04 2019 -0700

    mv file4 to file5

diff --git a/file4 b/file5
similarity index 100%
rename from file4
rename to file5


@ CB-Bailey @ Peter-Suwara @Gaurav @ Omer-Dagan @xsor @Hazok @nrz @ptc로 크레딧


0

또 다른 유용한 명령은 git diff-tree <hash>해시가 해시 범위 일 수 있는 위치입니다 ( <old>..<new>표기법 으로 표시). 출력 예 :

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

필드는 다음과 같습니다.

소스 모드, 대상 모드, 소스 해시, 대상 해시, 상태, 파일 이름

상태는 D (삭제됨), A (추가됨), M (수정 됨 등)입니다. 자세한 설명은 맨 페이지를 참조하십시오.


0

나는 일반적으로 로그를 얻기 위해 이것을 사용합니다.

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"

1
이 옵션에 대해서는 몰랐지만이 게시물은 로그를 필터링한다고 설명하면 더 유용합니다. 잠시 동안, 저자가 결과에 나열되는 방식을 변경하는 방법이라고 생각했습니다.
Stein
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.