2013-05-15 2 views
0

git 저장소에 있으면 안되는 파일을 커밋했습니다. 삭제하고 커밋했으나 여전히 git 기록을 통해 파일에 액세스 할 수 있습니다.힘내 : 커밋 된 파일을 영구히 삭제하는 방법?

커밋 된 파일을 영구적으로 삭제하면 어떻게 추적합니까?

+0

"항상 사용"이란 "영구적으로"를 의미합니까? –

+0

그리고 '흔적 없음'이란 무엇을 의미합니까? 나는 역사에서 파일을 제거하는 것이 가능하다고 생각하지 않는다. 그것은 이전의 커밋에 존재할 것이다. 하지만 버전 관리가 어떻게 작동하는지는 – ThanksForAllTheFish

+0

Github의 [중요한 데이터 삭제] (https://help.github.com/articles/remove-sensitive-data) 페이지 – fbstj

답변

7

filter-branch을 사용하여 파일을 영구적으로 제거 할 수 있습니다. 저장소의 모든 개정판에서 인수로 명령을 적용합니다.

git filter-branch --tree-filter 'rm -rf your_file' HEAD 

This detailed post 당신을 도울 수 있습니다. git doc도 꽤 도움이됩니다.

주석에서 언급했듯이 로컬 저장소를 정리하려면 git gc이 필요하고 원격 저장소를 업데이트하려면 git push이 필요합니다.

+0

또한 'git gc'가 누락되었습니다. 매달려있는 커밋이 가비지 수집 될 때까지 여전히 존재합니다. – AD7six

2

이 도움이 될 수 있습니다 :

https://help.github.com/articles/remove-sensitive-data

는 다음 명령은이 작업을 수행합니다

git clone https://github.com/defunkt/github-gem.git 
# Initialized empty Git repository in /Users/tekkub/tmp/github-gem/.git/ 
# remote: Counting objects: 1301, done. 
# remote: Compressing objects: 100% (769/769), done. 
# remote: Total 1301 (delta 724), reused 910 (delta 522) 
# Receiving objects: 100% (1301/1301), 164.39 KiB, done. 
# Resolving deltas: 100% (724/724), done. 

cd github-gem 

git filter-branch --force --index-filter \ 
    'git rm --cached --ignore-unmatch Rakefile' \ 
    --prune-empty --tag-name-filter cat -- --all 
# Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266) 
# Ref 'refs/heads/master' was rewritten 

이 명령은 모든 브랜치와 태그의 전체 역사를 실행, 어떤 커밋 변경 그 파일은 Rakefile 파일과 관련이 있으며 이후에 커밋됩니다. 이후에 비어있는 커밋 (Rakefile 만 변경했기 때문에)은 완전히 제거됩니다. 파일 이름뿐 아니라 제거 할 파일의 전체 경로를 지정해야합니다.

+0

'git gc '- 원격 리포 (있는 경우)에 영향을 미치지 않는다는 언급은 없습니다. – AD7six

+0

@ AD7six 내 게시물의 주어진 링크를 따라 가면'git gc' 명령이 나옵니다. 게시 된 코드는 짧은 소개 일 뿐이며 전체 기사를 읽는 것이 좋습니다. – Kai

+0

_answer_이 불완전합니다. 참조가 기본 정보가 아닌 지원 정보를 작성하는 것이 좋습니다. 나는 참조에 아주 친숙하다 :). – AD7six

관련 문제