4

내가 제거 할 민감한 내용이 포함 된 소스 파일이있는 자식의 repo가 ​​가로 질러 (단지 수정, 내가 파일을 삭제하지 않을 을 그 내용). 커밋은 프로젝트 개발 초기에 (단지 하나의 브랜치를 가졌을 때) 일찍이 있었지만 이제는 다른 n 개의 브랜치에서 자체를 찾습니다.망할 놈의 대화 - 리베이스 여러 가지

모든 브랜치에서 청소를 실행할 수있는 git-fu가 있습니까? 대화 형 리베이스는 한 번에 하나의 헤드 만 작동합니다.

나는 GitHub의에서 this 명령을 통해 발견했다 :

git filter-branch --force --index-filter \ 
'git rm --cached --ignore-unmatch DotNet/src/ExternalLibs/GemBox/' \ 
--prune-empty --tag-name-filter cat -- --all 

을하지만, 그것은 단지 삭제하지 개정안 작동합니다. 수정 된 내용이 민감한 아니라고 가정

A-B-C-**STUPID**-D-E-F 
        \ 
        \-G-H-I 
          \-J-K 
+0

도 "민감한"수정 된 내용이 없습니다 :

이 1337 자식-FU는컵 케이크의 당신 의례에을 가져? –

+0

코드에는 라이센스 키가있는 테스트 프로젝트의 코드 파일이 포함되어 있습니다.이 코드 파일은 shim으로 대체하려고합니다. 우리는 새로운 커밋으로 테스트를 수정할 수 있습니다. –

답변

2

는,이 작업 : 다음 비 대화식 REBASE를 사용하여 파일을 개정, 수정하려는 커밋에 새로운 지점을 체크 아웃 그 후 모든의 병합을 보존 이전에 취소 개정 된 새로운 개정에 다시 확약 : 당신이 REBASE 전후 master 사이의 유일한 차이는 개정 내용, 당신은 것입니다 것을 확인하면

# Checkout a branch "fix" at the commit STUPID 
git checkout -b fix STUPID 

# Make your file changes... 

# Amend STUPID 
git add . 
git commit --amend -m "REDACTED MWA-HA-HA!" 

# Do the BIGGEST rebase that you'll probably ever do in your entire life! 
git rebase --preserve-merges --onto fix STUPID master 
# or `-p` for short 
git rebase -p --onto fix STUPID master 

# Verify that the only difference between master and [email protected]{1} 
# is the amended content: 
git diff [email protected]{1} master 

아마 원한다. 당신의 reflog 만료 및 git gc 실행하여 이전 커밋의 로컬 및 원격 REPOS을 제거하기 위해 :

  1. :

    git reflog expire --expire=now --all 
    git gc --prune=now 
    

    을 당신은 당신이 다음에해야 할 수있는 다른 정리 단계에 대한 읽을 수 있습니다 Remove sensitive files and their commits from Git history.

  2. GitHub: Remove sensitive data. 당신이 당신이 ... 경우 뭔가 잘못에 환매 특약의 유일한 복사본 시도하기 전에 그런데

, 먼저 다른 지역의 복제에 REBASE를 테스트하십시오.

오, 그래, 나는 거의 잊어 버렸다. STUPID의 수정이 그 위에 리베이스 된 커밋과 충돌하는 경우 rebase 중에 이러한 충돌을 수정해야 할 것이다. 2012 년부터 자식의 repos에 공연 오픈 심장 수술)

+0

감사합니다. 내가 먼저 한 일은 (파일을 게시하기 전에) 파일을 수정하고 'git rebase -i HEAD ~ 250'명령을 실행하고 STUPID 바로 뒤에 픽스 업 커밋을 이동 한 다음 스쿼시합니다. 이것은 첫번째 지점을 위해 일했지만 그 다음에 나에게 줬다. (거의 인정되지 않는) 다른 사람들을위한 모든 종류의 고통.내일 자지 않으려 고 울부 짖는 소리로 내일 고쳐주세요. :) –