특정 날짜 이전에 힘내 기록 삭제하기


2

나는 실수로 일부 민감한 정보를 공용 git repo에 위탁했습니다 (예!). 특정 기간 동안 모든 기록을 영구히 삭제할 수있는 방법이 있습니까? 방금 전 레포를 지우고 신선하게 시작해야합니까?

답변:


4

이것을하는 표준 방법은이다 git-filter-branch. 이를 통해 커밋 기록을 살펴보고 각 커밋을 다시 작성할 수 있습니다. 당신의 경우에, 당신이 실수로 passwords.txt당신의 역사에서 그것을 제거하고 제거해야 한다고 가정 해 봅시다 .

실행할 명령은 다음과 같습니다.

git filter-branch --index-filter 'git rm --cached --ignore-unmatch passwords.txt' HEAD

한 장 한 장 :

  • git filter-branch : 다시 쓰기 기록.

  • --index-filter : 각 커밋에 대해 인덱스를 변경 한 다음 다시 커밋하고 싶습니다.

  • 'git rm --cached --ignore-unmatch passwords.txt'각 커밋에 대해이 git-rm명령 을 실행하여 인덱스를 변경하십시오 . 이렇게하면 passwords.txt인덱스에서 명명 된 모든 파일이 제거됩니다 .

  • HEAD : 현재 체크 아웃 된 브랜치의 히스토리를 다시 작성하십시오.

끝나면 부족한 부분을 제외하고는 새로운 커밋을 동일한 기록으로 체크 아웃합니다 passwords.txt. 히스토리를 다시 작성 했으므로 리포지토리를 공유하는 모든 사용자에게 업스트림 리베이스에서 복구 해야한다고 경고해야합니다 .

예를 들어, 당신의 역사가 이와 같이 보이고 BC가 커밋 되었다면 :

A ---- B ---- C ---- D ---- E

작업이 완료되면 내역이 다음과 같이 보입니다.

A
 \
  B' ---- C' ---- D' ---- E' 

D와 E가 D '와 E'에 다시 쓰여졌 음을 주목하라. 그들은 같은 트리를 가리킬 수도 있지만 역사가 바뀌었기 때문에 새로운 커밋 ID를 가지며 힘내에 관한 한 새로운 커밋으로 간주됩니다.

사용법에 대한 더 자세한 정보 는 Pro Git bookgit-filter-branch"Rewriting History"섹션 에서 찾을 수 있습니다.

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