'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
'programing' 카테고리의 다른 글
리눅스 명령줄에서 여러 파일의 문자열을 교체하는 방법 (0) | 2023.04.22 |
---|---|
저는 .Net, C#, WPF 프로그래머입니다.익스프레션 블렌드는 가치가 있나요? (0) | 2023.04.22 |
asp.net MVC 4 및 MVC 5에서 디폴트컨트롤러를 설정하는 방법 (0) | 2023.04.22 |
명령어가 실패했을 때 bash를 즉시 종료시키는 "set -e"의 효과를 취소하려면 어떻게 해야 합니까? (0) | 2023.04.22 |
MergeArea를 사용하여 VBA Excel에서 병합된 셀을 검출합니다. (0) | 2023.04.22 |