경고 : 커밋되지 않은 작업을 잃고 싶지 않으면 다음 명령을 사용하지 마십시오!
사용법 git reset
이 설명되었지만 파이프 명령에 대한 설명도 요청했습니다.
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
이 명령 git ls-files
은 git이 알고있는 모든 파일을 나열합니다. 이 옵션 -z
은에 예상되는 형식으로 특정 형식을 적용한 xargs -0
다음이를 호출 rm -f
하여 승인 여부를 확인하지 않고 제거합니다.
즉, "git이 알고있는 모든 파일을 나열하고 로컬 사본을 제거하십시오".
그런 다음 git diff
git이 알고있는 다른 버전의 항목 사이의 변경 사항을 보여줍니다. 서로 다른 트리 간 변경, 로컬 복사본과 원격 복사본 간의 차이점 등이 될 수 있습니다.
여기에 사용 된 비 단계적 변경 사항이 표시됩니다. 변경했지만 아직 커밋하지 않은 파일 이 옵션 --name-only
은 (전체) 파일 이름 만 원하고 --diff-filter=D
삭제 된 파일에만 관심이 있음을 의미합니다. (이봐, 우리는 단지 많은 것들을 삭제하지 않았습니까?)
그러면 xargs -0
이전에 보았던 파이프로 파이프되어 호출 git rm --cached
됩니다. 이는 그것들을 캐시에서 제거하는 반면, 작업 트리는 단독으로 남겨 두어야합니다. 작업 트리에서 모든 파일을 제거했습니다. 이제 색인에서 제거되었습니다.
다시 말해, 단계적이든 비 단계적이든 모든 변경 사항이 사라지고 작업 트리가 비어있는 것입니다. 외침을하고, 원본 또는 원격에서 파일을 새로 체크 아웃 한 후 작업을 다시 수행하십시오. 이 지옥의 선을 쓴 사디스트를 저주하십시오. 나는 왜 누군가가 이것을하고 싶어하는지 전혀 모른다.
TL; DR : 당신은 모든 것을 호스로 쳤습니다. 다시 시작 git reset
하여 지금부터 사용하십시오 .
rm -f
git 명령이 아니며--cached
옵션 이 없습니다 . 로컬 파일은 실행하기 전에 삭제git rm
되었으므로 합법적git rm
으로 아무것도 비난 할 수 없다고 생각합니다 .