programing

'git log'에 'svn log -v'와 같은 파일 이름을 표시하는 방법

sourcetip 2023. 4. 22. 23:04
반응형

'git log'에 'svn log -v'와 같은 파일 이름을 표시하는 방법

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

jes5199$ svn 로그 -v------------------------------------------------------------------------r1 | jes5199 | 2007-01-03 14:39:41-0800 (2007년 1월 3일 수요일)| 1행변경된 경로:
A/AUTHORTS/복사A / ChangeLogA/EVOLUTIONA / 설치A / MacOSX

Git에서 각 커밋에서 변경된 파일 목록을 빠르게 가져올 수 있는 방법이 있습니까?

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

git log --name-only

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

git log --name-status

경로 이름 및 변경된 파일의 diffstat의 경우:

git log --stat

더 많은 선택지가 있습니다.메뉴얼을 참조해 주세요.

주의: git whatchanged권장되지 않습니다. 사용git log대신

신규 사용자는 대신 git-log[1]를 사용할 것을 권장합니다.whatchanged명령어는 기본적으로 git-log[1]와 동일하지만 기본적으로는 raw 형식의 diff 출력을 표시하고 병합을 건너뜁니다.

이 명령어는 주로 역사적 이유로 유지된다; 오래전에 Git를 배운 많은 사람들의 손가락git log는 Linux 커널 메일링 리스트를 읽고 그것을 입력하도록 훈련되어 있습니다.


명령어를 사용할 수 있습니다.git whatchanged --stat(커밋 메시지와 함께) 각 커밋에서 변경된 파일 목록을 가져옵니다.

레퍼런스

git show명령어이기도 합니다.

뭐랄까svn diff단, git commit 해시를 전달하여 그 차이를 확인할 수 있습니다.

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

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

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

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

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

이 방법을 사용할 때 주의할 점은 출력에 무시해야 하는 공백 행이 있다는 것입니다.로컬 브랜치에서 변경되었지만 아직 리모트 브랜치로 푸시되지 않은 파일을 표시하고 리모트 브랜치에서 최신 파일이 이미 Import되었음을 보증할 수 없는 경우 이 방법을 사용하면 편리합니다.예를 들어 다음과 같습니다.

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

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

변경된 파일의 이력을 표시하기 위해 매일 사용합니다.

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

..gitconfig다음을 수행합니다.

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

이 짧은 명령어는 커밋별로 변경된 모든 파일을 나열하는 데 매우 유용합니다.

git log --name-only --oneline

--이름만

변경된 파일의 이름만 표시합니다.파일명은 UTF-8로 인코딩되는 경우가 많습니다.자세한 것은, git-log1 메뉴얼 페이지의 인코딩에 관한 설명을 참조해 주세요.

--온라인

This is a shorthand for "--pretty=oneline --abbrev-commit" used together.

산출량 산출량

나는 이것을 사용한다.

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
...

출력 예시와 함께 답변 요약

이것은 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 @Omer-Dagan @xor @Hazok @nrz @ptc에 대한 크레딧

git diff --stat HEAD^!, 커밋의 된 파일 및의 수를 나타냅니다( 「 」 、 「 」 、 「 」 / 「 」).HEAD를 참조해 주세요.

파일명으로만 구성된 간결한 출력을 얻을 수 있는 명령어는 없는 것 같고, 여러 커밋의 행 수를 한 번에 추가 및 삭제하기 위해 Bash 스크립트를 작성했습니다.

#!/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하게 HEAD로로 합니다.HEAD~99 파이프로할 수 less.

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

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

사용하고 있는 것:

git diff-tree -v --name-status -r <commit-id>

또한 svn log -v와 같은 매우 유사한 출력이 표시됩니다.

로그를 취득할 때는 일반적으로 다음과 같이 사용합니다.

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

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

하나의 는 '입니다.git diff-tree <hash>여기서 hash는 해시 범위도 지정할 수 있습니다.<old>..<new> 이치노출력 예는 다음과 같습니다.

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

필드는 다음과 같습니다.

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

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

언급URL : https://stackoverflow.com/questions/1230084/how-to-have-git-log-show-filenames-like-svn-log-v

반응형