git 저장소에서 파일을 완전히 제거하려면 어떻게해야합니까?


78

최근에 내 텍스트 편집기가 사용하는 프로젝트 파일 (다른 정크와 함께)이 프로젝트의 git 저장소에 추가되었음을 알았습니다. 실제로 프로젝트의 일부가 아니기 때문에 제거하고 싶지만 git rm저장소에서 이전 버전을 제거하지 않으며 유망 해 보이는 다른 것을 찾을 수 없습니다.


5
부분 중복, 이전 질문에 확실히
포함됨

답변:


140

원하는 도구는 git filter-branch입니다. 사용법은 여기 에 설명 되어 있지만 기본적으로 다음과 같습니다.

$ git filter-branch --tree-filter 'rm -f my_file' HEAD

모든 커밋 에서 "my_file"을 제거 합니다.

이렇게하면 모든 커밋이 다시 작성되므로 원격 저장소로 푸시하면 (a) 강제로 업데이트해야하며 (b) 사용자로부터 가져온 다른 모든 사람은 이제 중복 된 커밋을 갖게됩니다 (기록을 다시 작성 했으므로). git rebaseman 페이지 에 설명되어 있습니다.


19
--prune-empty결과적으로 생성 된 빈 커밋도 제거되도록 추가하는 것이 좋습니다 .
fnkr

다른 디렉토리에 같은 이름을 가진 많은 파일이있는 저장소에서 어떻게 작동합니까? 이름이 같은 모든 파일을 삭제합니까?

2
@CodeMonkey :이 경우 더 길고 고유 한 경로를 사용합니다.
mipadi

1
나중에해야합니까 git push --force? @mipadi
alper

1
@mipadi, 오래 전에이 파일을 로컬에서 삭제하면 어떻게 되나요? (그리고 이러한 삭제를 커밋하고 푸시했습니다.)이 경우 저장소에서 파일을 어떻게 삭제할 수 있습니까?
mannyglover

11

이것이 git filter-branch목적이지만 리포지토리 기록이 변경되고 기록 재 작성 후 커밋 해시가 달라집니다.

공간을 비우고 싶다면을 사용하는 것이 좋습니다 git forget-blob. 왜냐하면 git filter-branch리모트, 리플 로그, 태그 등에 의해 여전히 참조 될 수 있기 때문에 git만으로는 파일을 잊을 수 없기 때문 입니다.

git forget-blob main.c.swp

여기에서 자세한 정보를 얻을 수 있습니다.

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