2014-09-24 3 views
2

동료가 실수로 소스 제어에 아무런 업무가없는 큰 바이너리 파일을 커밋하여 저장소가 비정상적으로 커졌습니다. 그런 다음 그는이 커밋을 공통 서버로 밀어 넣었고 그 이후로 다른 커밋과 푸시가있었습니다. 그 커밋을 취소하거나 원격 저장소에서 바이너리 파일을 제거하여 저장소가 일반적인 크기로 돌아갈 수있는 방법을 찾고 있습니다.힘내 : 원격 기록을 다시 쓰는 방법?

우리의 공용 리모컨은 assembla.com에 있으므로 직접 쉘에 액세스 할 수 없습니다. 단지 git입니다.

이것이 가능하다고 가정하면 다른 다운 스트림 노드에 어떤 결과가 발생합니까? 모두가 새로운 저장소를 복제해야합니까? (그렇다면 괜찮습니다.)

+0

참고로 큰 파일을 더 일반적으로 제거하려면 'git filter-branch'또는 [repo cleaning tool ] (http://rtyley.github.io/bfg-repo-cleaner/). –

답변

4

거짓 커밋을 제거하기 위해 브랜치를 리베이스 할 수 있습니다. 그런 다음 Assembla의 리포지토리에 리베이스 된 브랜치를 강제 푸시해야합니다. 모든 개발자는 새로운 복제본을 작성하거나 원격 분기를 가져온 다음 로컬 분기를 새로운 원격 분기로 하드 리셋해야합니다.

기본적으로 명령이 될 것 (반드시 완료되지 않음) :

은 거짓 커밋 제거하려면 :

git rebase -i $(commit id before false commit) 

git commit 

git push -f origin master (assuming that the branch is master and the remote at assembla is called origin) 

자식 당신이 커밋 제거 할 수있는 대화 형 REBASE 모드를 시작합니다 -i을 리베이스.

는 개발자의 복제 업데이트하려면 :

git fetch 

git reset --hard origin/master 

을하거나 신선한

git clone $(repositoryurl) 

을 여기에 큰 지방이 올하지만 : 당신이 그렇게 할 때

, 당신이해야 변경을하기 전에 모든 개발자에게 자신의 작업을 커밋하고 푸시하도록 알리십시오. 그런 다음 이전 저장소에서 백업을 수행하여 문제가 생길 경우 복구 할 수 있습니다.