태그 보관물: git

git

특정 날짜 이전에 힘내 기록 삭제하기 (예!). 특정 기간 동안 모든 기록을 영구히

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



답변

이것을하는 표준 방법은이다 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”섹션 에서 찾을 수 있습니다.


답변