[git] git rm-치명적 : 경로 사양이 파일과 일치하지 않음
실수로 9000 장 이상의 사진을 프로젝트 폴더에 추가했습니다. 그리고 그들을 맡겼습니다. 그런 다음 디스크에서 삭제했습니다. 헌신적이다.
이제 변경 사항을 git 서버에 푸시하려고합니다. 그러나 너무 오래 걸리고 12Gb의 데이터를 보내려고합니다.
디스크의 파일 크기를 확인한 결과 실제로 .git
폴더가 12Gb를 차지하는 것을 확인했습니다 .
거기에서 사진을 삭제하는 방법 ? 시도 git rm
했지만 실패했습니다.
❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files
디스크에서 모두 삭제했지만 여전히 .git
폴더에 있습니다.
나는 추가하려고 public/photos
에 .gitignore
:
public/photos/
*.zip
그러나 결과는 없습니다. 물론 hard reset head
프로젝트에 정크 사진이 많지 않은 순간까지도 할 수있었습니다 . 하지만 그 이후로 여러 번 커밋하고 코드를 많이 변경했습니다.
답변
귀하의 경우 git filter-branch
대신 git rm
.
git rm
더 이상 git에 의해 추적되지 않는다는 의미에서 파일을 삭제하지만 해당 이미지에 해당하는 이전 커밋 객체를 제거하지 않으므로 12GB 이미지에 해당하는 이전 커밋을 계속 푸시해야합니다.
는 git filter-branch
, 다른 한편으로는, 따라서 그들 중 하나를 밀어 필요 멀리하고,뿐만 아니라 이전의 모든 커밋에서 해당 파일을 제거 할 수 있습니다.
-
명령 사용
git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch public/photos' \ --prune-empty --tag-name-filter cat -- --all
-
필터 분기가 완료된 후 의도하지 않은 파일이 손실되지 않았는지 확인합니다.
-
이제 .gitignore 규칙을 추가하십시오.
echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos"
-
이제 밀어
git push -f origin branch
추가 도움 이 필요 하면 이것 , 이것 및 이것을 확인하십시오 . 더 안전한쪽에 있기 위해이 지침을 진행하기 전에 시스템에 저장소의 백업 복사본을 만드는 것이 좋습니다.
원래 오류 메시지는을 사용하여 이미 추적을 해제했기 때문에 발생하므로 추적 git rm
하지 않는 파일을 제거 할 수 없기 때문에 git이 불평합니다. 여기에서 자세한 내용을 읽어보십시오 .
답변
아주 간단한 대답입니다.
1 단계:
먼저 삭제하려는 추적되지 않은 파일을 추가하십시오.
git add .
또는 사용git add <filename>
.
2 단계:
그런 다음 rm = remove 및 -f = forcely 명령을 사용하여 쉽게 삭제 git rm -f <filename>
하십시오 .
답변
1 단계
파일 이름을 .gitignore
합니다.
2 단계
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch YOURFILE' \
--prune-empty --tag-name-filter cat -- --all
3 단계
git push -f origin branch
@mu에게 큰 감사를드립니다.
답변
이것을 사용하면 나를 위해 일했습니다.
git rm -f --cached <filename>
답변
이 체인은 제 경우에서 작동합니다.
git rm -r WebApplication/packages
확인 git-dialog가 있습니다. “y”옵션을 선택해야합니다.
git commit -m "blabla"
git push -f origin <ur_branch>
답변
git stash
rm
대신을 사용하여 삭제 한 파일을 복원했습니다 git rm
.
나는 먼저 마지막 해시를 체크 아웃했지만 이것이 필요하다고 생각하지 않습니다.
답변
git에서 추적되고 오래된 커밋 된 파일을 제거하려면 아래 명령을 사용할 수 있습니다. 제 경우에는 dist
디렉토리 에서 모든 파일을 추적 해제하고 제거하고 싶습니다 .
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch dist' --tag-name-filter cat -- --all
그런 다음 .gitignore
더 이상 추적되지 않도록 추가해야합니다 .