추적 된 파일에 대해 Git "잊어 버림"을 어떻게 만들 수는 있지만 이제는 .gitignore에 있습니까?


질문

 

git가 추적중인 파일이 있지만 이제 파일은 .gitignore 목록에 있습니다.

그러나 해당 파일은 편집 된 후 Git 상태가 계속 표시됩니다.Git은 어떻게 그것을 완전히 잊어 버리겠습니까?


답변

 

.Gitignore는 untracked 파일이 Git에서 추적 된 파일 세트에 추가되지 않도록 (add -f없이)을 방지하지만, Git은 이미 추적중인 파일을 계속 추적합니다.

파일 추적을 중지하려면 인덱스에서 제거해야합니다.이 명령으로이를 수행 할 수 있습니다.

git rm --cached <file>

전체 폴더를 제거하려면 재귀 적으로 모든 파일을 제거해야합니다.

git rm -r --cached <folder>

헤드 개정판에서 파일의 제거는 다음 커밋에서 발생합니다.

경고 :이 작업은 로컬에서 실제 파일을 제거하지는 않지만 다음 Git Pull의 다른 개발자 컴퓨터의 파일을 제거합니다.



답변

아래의 일련의 명령은 Git 인덱스 (작업 디렉토리 또는 로컬 저장소가 아닌)에서 모든 항목을 제거한 다음 Git Index를 업데이트하면서 Git Index를 갱신합니다.추신.index = 캐시

첫 번째:

git rm -r --cached .
git add .

그 다음에:

git commit -am "Remove ignored files"

또는 1 라이너로서 :

git rm -r --cached . && git add . && git commit -am "Remove ignored files"


답변

Git Update-index는 나를위한 작업을 수행합니다.

git update-index --assume-unchanged <file>

참고 :이 솔루션은 실제로 untracked 파일에만 적용되면서 .gitignore에 실제로 독립적입니다.


업데이트, 더 나은 옵션

이 답변이 게시되었으므로 새 옵션이 만들어졌고 선호해야합니다.사용자가 더 이상 커밋하고 싶지 않은 수정 된 추적 파일을 사용하고 성능을 유지하려는 수정 된 추적 파일에 대한 수정 된 추적 파일을 사용해야합니다.자세한 내용은 https://stackoverflow.com/a/13631525/717372를 참조하십시오.

git update-index --skip-worktree <file>

취소하기 위해서

git update-index --no-skip-worktree <file>


답변

git ls-files -c --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

이것은 무시 된 파일의 목록을 취하고 색인에서 제거하고 변경 사항을 커밋합니다.



답변

항상이 명령을 사용하여 untracked 파일을 제거합니다. 한 줄, UNIX 스타일, 클린 출력 :

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

무시 된 모든 파일을 나열하고 모든 출력 줄을 인용 된 줄로 대신 공백이있는 경로를 처리하여 모든 것을 통과하여 Git RM -R -R - Cached로 전달하여 경로 / 파일 / 디렉토리를 인덱스에서 제거합니다.



답변

그것을 꺼내고, 커밋 한 다음 다시 이동하십시오.

이것은 과거에 저를 위해 일했습니다. 그러나 아마도 이것을 성취하는 'GitTier'가 있습니다.

출처:https://stackoverflow.com/questions/1274057/how-can-i-make-git-forget-about-a-file-that-was-tracked-but-is-now-in-gitign