2013-05-10 1 views
1

기본적으로 나는 실수로 '커밋'에 'files'폴더를 추가 했으므로 모든 파일과 함께 'files'폴더가 나열된 개발의 네 가지 이전 분기가 있습니다. 이 브랜치를 변경하고 싶지는 않습니다. 파일 폴더를 제거하고 나머지는 그대로두기를 원합니다. 운 좋게도 인터넷 검색을 시도 했습니까? 나는 쉽게 뭔가를 놓치고 있다고 가정하고있어, 어떤 도움을 많이 주시면 감사하겠습니다.새로운 변경 사항을 커밋하지 않고 이전 분기의 폴더를 untrack/ignore 할 수 있습니까?

답변

4

그냥 다음 커밋에서 제거 하시겠습니까, 아니면 프로젝트 기록에서 완전히 제거 하시겠습니까?

git rm BAD_DIRECTORY && git commit -a은 전자 메일을 처리합니다. 재 작성 기록은 다른 저장소와 귀하의 저장소를 동기화하지 않으므로이 저장소를 공개적으로 공유 한 경우이 방법을 사용해야합니다.

후자를 수행하려면 git filter-branch을 사용하십시오. 히스토리의 각 상태 (커밋)에서 일련의 필터 (명령)를 프로젝트에 적용하여 히스토리를 다시 작성합니다. 사용 사례를 들어, 같은 것을 사용할 수 있습니다 --index-filter를 사용하여

git filter-branch --index-filter "git rm --cached --ignore-unmatch BAD_DIRECTORY" 

을, 당신은 시간을 절약, 각 커밋에서 체크 아웃을 할 필요 마십시오. 자세한 정보는 매뉴얼 페이지를 확인하십시오. --ignore-unmatchgit rm에 추가하면 BAD_DIRECTORY가 특정 커밋에서 존재하지 않으면 실패하지 않습니다.

+0

프로젝트 기록에서 완전히 제거하는 것이 내가 필요한 것이라고 생각합니다. 내 '마스터'내가
'code'git RM -r --cached 파일을 제거하기 때문에 'update_05'가지의 BAD_DIRECTORY이없는은/*'update_04 '을 통해 지점'update_01 '로
그러나 code' '그것은 여전히 ​​존재합니다. – Ganginator

+0

마스터에서 제거한 후 새 마스터 맨 위에 update_05 리베이스를 제안합니다. update_05가 BAD_DIR을 수정하지 않는 한 두 브랜치를 모두 필터링하지 않아도됩니다. – jpaugh

+0

감사합니다. 도움에 감사드립니다. 내가 할 수 있다면 이것에 대한 마지막 질문 하나. ''code'git을 수행 한 후 filter-branch --index-filter "git rm -r --cached --ignore-unmatch files/*"'code', 어떻게 작동하는지 보았습니다. 어떻게 이들을 github에 안전하게 밀어 넣을 수 있습니까? 그들은 'files'디렉토리도 제거합니까? – Ganginator

관련 문제