2017-12-13 19 views
0

나는 최근에 내가 민감한 정보를 담고있는 .env 파일을 우연히 저지른 것을 발견했다. 내 생각 엔 Webstorm이 생성 한 파일을 .gitignore 파일에 즉시 추가했기 때문에 실수로이 파일을 git에 추가 할 것인지 묻는 메시지가 나타나면 실수로 OK (확인)를 클릭 한 것입니다. 나는이 파일이 몇 주 동안 지속적으로 VCS로 보내지는 것을 알지 못했다. 즉시 git rm --cached .env을 실행하고 BFG-Repo Cleaner을 사용하여 내 버전 기록에서 파일을 제거했습니다. 문제는 BFG-Repo Cleaner가 작업을 수행했지만 (이상하게도 모든 커밋이 이제 복제 됨) 파일이 내 커밋 내역에 더 이상 존재하지 않기 때문에 실제로 파일을 제거한 커밋에서 제거 된 항목이 정확히 표시된다는 것입니다. 암호 및 키. 이것은 BFG-Repo Cleaner를 실행 한 결과입니까? 만약 그렇다면, 그 커밋을 잃어 버리지 않고 그 커밋을 역사에서 어떻게 제거 할 수 있습니까? 내가 찾을 수있는 대부분의 대답은 git reset --hard을 사용하여 내가 제거하고 싶은 것보다 먼저 커밋으로 되돌아가는 것을 가리킨다. 그러나 그 시점 이후에 내 일을 잃고 싶지는 않다.내역에서 중요한 정보가 들어있는 커밋 제거하기

버전 히스토리에서 중요한 데이터를 제거하도록 설계된 도구가 민감한 데이터가 제거 된 커밋의 diff을 계속 표시한다는 것이 이상합니다.

BFG-Repo-Cleaner는 git-filter-branch의 쉬운 대안처럼 보였으 나 여기서는 git-filter-branch을 사용하는 유스 케이스가 있습니다. 파일을 제거하는 것이 아니라 파일의 내용을 보여주는 커밋을 제거하십시오. 내가 제거한 파일?

답변

1

옵션 1 : 파일을 별도 커밋으로 커밋하는 경우.

git rebase -i commit_hash of one less than needed and remove that commit. 

말 : 이것은 당신의 역사

commit 5347819473b66359e8324004470040bee0892447 (HEAD -> master) 
Author: XXXX 
Date: Wed Dec 13 21:43:29 2017 +0530 

    third commit 

blah2.h | 1 + 
1 file changed, 1 insertion(+) 

commit d88e9dc5aadfad5872a2cc8214ba5295e2668526 
Author: XXXX 
Date: Wed Dec 13 21:42:56 2017 +0530 

    second commit 

blah1.h | 1 + 
1 file changed, 1 insertion(+) 

commit 2419b28fee57a6923ce37e2e144c12d88fb75183 
Author: XXXX 
Date: Wed Dec 13 21:42:33 2017 +0530 

    first commit 

blah.h | 1 + 
1 file changed, 1 insertion(+) 

에게 커밋입니다 그리고 당신은 두 번째 제거 커밋합니다.

git rebase -i 2419b28fee57a6923ce37e2e144c12d88fb75183 - Commit hash of first commit. And then interactively remove the line containing the second commit and save. 

옵션 2 : 다음뿐만 아니라 다른 변경하여 파일을 커밋하면

git reset commit_hash of one less than needed. 

무시 이눔 새로운 커밋으로 다음의 모든 변경 사항을 적용하기 위해 해당 파일을 추가합니다. 이 경우, 당신은 그 시점에서 그 파일을 커밋하는 시점에서 프로젝트의 역사를 잃을 것입니다.