Git 저장소에 삭제 된 파일을 모두 나열하려면 어떻게해야합니까?


304

Git은 파일이 삭제 될 때의 정보를 저장하고 개별 커밋을 확인하여 어떤 파일이 제거되었는지 확인할 수 있지만 리포지토리 수명 동안 삭제 된 모든 파일 목록을 생성하는 명령이 있습니까?


이 답변을 우회하지만 한 커밋 해시 또는 분기에서 추가, 이름 바꾸기, 삭제, 수정 등의 파일 목록을 보려면 누구나 다음을 수행하십시오 git diff --name-status commit_hash.
Gabriel Staples

답변:


409
git log --diff-filter=D --summary

Git 저장소에서 삭제 된 파일 찾기 및 복원을 참조하십시오.

어떤 커밋이 제거되었는지에 대한 모든 정보를 원하지 않으면 grep delete거기에 추가하십시오 .

git log --diff-filter=D --summary | grep delete

13
경고 : 삭제 한 모든 파일이 나열됩니다. 당신이 파일을 삭제 한 경우, 같은 이름의 새 파일을 생성, 그것은 것입니다 현존하는 파일이있다하더라도,이 목록에 표시됩니다.
TJ Crowder

24
git whatchanged 명령 도 살펴 봐야합니다 . 꽤 멋지다.
Mr.Black

6
이것은 또한 이름 변경을 삭제로 나열합니다. 이 사용을 건너 뛰려면git log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic

2
git 2.9에서는 이름 바꾸기 감지가 기본적으로 활성화됩니다. 삭제로 다시 확인하려면git log --no-renames --diff-filter=D --summary | grep delete
Michael Große

2
grep delete커밋 메시지에 delete라는 단어가 있으면 선택되기 때문에 사용하십시오 . grep 'delete mode'대신 사용하십시오 .
Vadim


37

현재 삭제 된 파일 만보고 싶은 경우 다음을 사용할 수 있습니다.

git ls-files --deleted

그런 다음 xargs git rm에 연결되는 파이프 ( "git rm"을 사용하지 않고 삭제 한 경우)를 제거하려는 경우

git ls-files --deleted | xargs git rm

11
작업 복사본에서 삭제 된 색인의 파일 만 표시됩니다. OP는 삭제 된 모든 파일을 원합니다.
Max Nanasy

1
또는git rm $(git ls-files --deleted)
yunzen

OP가 원하는 것이 아니지만 검색에서 쿼리를 올바르게 구문 분석하는 데 문제가 있었기 때문에이 방법은 여전히 ​​적어도 나에게는 유용했습니다.
solstice333

10

스택 오버플로 답변을 인용 했습니다 .

변경된 각 파일에 대해 변경 유형 (A : 추가, M : 수정, D : 삭제) 을 얻는 매우 깔끔한 방법 입니다.

git diff --name-status

4

그리고 어떻게 든 결과를 제한하려면 여기 좋은 결과가 있습니다.

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

some_dir커밋 번호와 함께 모든 파일이 삭제됩니다 (sed 명령 참조). 모든 sed 정규식이 수행합니다 (삭제 된 파일 형식 등을 찾는 데 사용합니다)


2
나는 그것이 일상적인 개발자의 삶에 유용하도록 복잡 해지는 방법이라고 생각합니다. 대신, 현재 디렉토리에서 삭제 된 파일을 나열하려면 다음을 수행하십시오.git log --diff-filter=D .
Sebi

내가 가진 경우는 디렉토리도 제거되었고 이름의 새로운 부분이었습니다.
estani

4

Windows에는 grep명령 이 없으므로 PowerShell에서 나를 위해 일했습니다.

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

무엇입니까 Select-String?
MarcusJ


Windows에는 FINDFINDSTR 이 있지만 결코 사용하지는 않았 음을 인정해야합니다. Git Bash를 설치 하는 것이 가장 쉬운 방법입니다. 대안은 팽창 된 Cygwin 입니다.
Peter Mortensen

4

some_branch에 삭제 된 모든 파일 표시

git diff origin/master...origin/some_branch --name-status | grep ^D

또는

git diff origin/master...origin/some_branch --name-status --diff-filter=D 

2
D가있는 모든 파일이 포함되어 있기 때문에 작동하지 않습니다. 당신은 같은 것을 필요 git diff origin/master...origin/some_branch --name-status | grep ^D또는git diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood

1

이렇게하면 모든 분기에서 삭제 된 모든 파일 목록이 경로별로 정렬됩니다.

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

msysgit (2.6.1.windows.1)에서 작동합니다. git 파일이 모드 100644 또는 100755로 커밋되었으므로 "삭제 모드 100"이 필요합니다.

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