git은 여전히 ​​.gitignore에 추가 한 후 수정 된 파일을 보여줍니다


252

이것을 .gitignore 파일에 추가하고 있습니다

.idea/*

어쨌든 상태는 다음과 같습니다.

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

내가 뭘 잘못하고 있죠 ? 나는 심지어 ~ / .gitignore_global 에 .idea / *를 추가 했지만 자식 상태는 어쨌든 나를 보여줍니다.

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

답변:


422

귀하 .gitignore는 작동하지만 파일이 이미 색인에 있었기 때문에 여전히 파일을 추적합니다.

이것을 막으려면 다음을 수행해야합니다. git rm -r --cached .idea/

커밋하면 .idea/디렉토리가 git 저장소에서 제거되고 다음 커밋은 .idea/디렉토리 를 무시합니다 .

추신 : 디렉토리를 무시하는 .idea/대신 사용할 수 있습니다 .idea/*. 당신의 패턴에 대한 자세한 정보를 찾을 수 있습니다 .gitignore의 맨 페이지를 .


git-rm매뉴얼 페이지 에서 유용한 인용문

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

".idea / 만 추가하면 효과가 있습니다"라는 의미를 설명해 주시겠습니까? 이것이 사용 .gitignore하고 수행 하는 대안 솔루션 git rm -cached입니까?
Mehrad

3
@Mehrad .gitignore에서 * 필요 없음
Steve Pitchers

2
아니요, .idea /를 추가해도 작동하지 않습니다. 대답에서 말했듯이 이미 색인에 있기 때문입니다.
Henrique de Sousa

15
commit캐시 된 파일을 제거한 후 해야한다고 말하고 있습니까? 그것은 실제로 반 직관적 인 것 같습니다. 이것들은 커밋하고 싶지 않은 파일입니다. 그리고 나는 그것들을 저장소에서 삭제하고 싶지 않습니다 (더 이상 내 혼란을 피하기를 원합니다 git status). 아니면 정말 혼란 스럽습니까?
Scott Biggs

6
그의 커밋은 이전 커밋으로 인해 이미 git에 의해 추적되었으므로이를 제거하려면 리포지토리에서 해당 파일을 제거하는 새로운 커밋을 만들어야합니다.
mcls

47

이 문제를 여전히 검색하는 사람들에게이 페이지 만보고 있습니다.

이렇게하면 캐시 된 인덱스 파일을 제거한 다음 .gitignore파일 변경 사항을 포함하여 필요한 파일 만 추가 할 수 있습니다.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

여기 좀 더 자세한 정보가 있습니다.

  1. 이 명령은 인덱스에서 모든 캐시 된 파일을 제거합니다.
  2. 이 명령은에 언급 ​​된 파일을 제외한 모든 파일을 추가합니다 gitignore.
  3. 이 명령은 파일을 다시 커밋하고 git이 무시할 파일을 제거하지만 로컬 디렉토리에 보관합니다.

1
이것은 나에게 유용했습니다 .Windows cmd에서는 작은 따옴표가 # 3에서 작동하지 않는 것 같습니다. git commit -am 사용 "무시 된 파일 제거"작동합니다.
Sundance.101

1
걱정하지 말고 명확하고 간결한 답변에 다시 한 번 감사드립니다.
Sundance.101

1
이 솔루션은 내 프로젝트 파일을 엉망으로 만듭니다. 이 작업을 수행 한 후 모든 것을 되돌려 야했습니다.
Fatmajk

1

여기 및 다른 곳에서 제공되는 솔루션은 저에게 효과적이지 않으므로 향후 독자를위한 토론에 추가하겠습니다. 나는 아직 절차를 완전히 이해하지는 못했지만 마침내 (유사한) 문제를 해결하고 공유하고 싶다.

Windows 10의 IntelliJ IDEA에서 자식으로 작업 할 때 실수로 수백 개의 파일로 일부 문서 디렉토리를 캐시했습니다. .gitignore (아마도 조금 움직여서) 기본 변경 목록에서 제거 할 수 없었습니다.

나는 처음에 내가 한 실제 변화를 저지른 다음이 문제를 해결했습니다. 나는 시도 git rm -r --cached .했지만 항상 및 플래그 와는 path-spec다른 변형으로 오류 path-spec가 발생합니다 .-f-r

git status여전히 파일 이름을 표시하므로으로 일부 동사를 사용해 git rm -cached보았지만 운이 없었습니다. 변경 사항을 숨기고 고정 해제하는 것이 효과가있는 것처럼 보였지만 일정 시간이 지나면 다시 대기열에 들어갔습니다 (정확한 기간에는 약간 흐릿합니다). 나는 마지막 으로이 항목을 잘 사용하여 제거했습니다.

git reset

실제로 커밋하려는 변경 / 캐시 된 변경 사항이없는 경우 이것이 GOOD IDEA라고 가정합니다.


0

간단히 추가 git rm -r --cached <folder_name/file_name>

때때로, 파일의 commit 명령 후에 .gitignore 파일을 업데이트합니다. 따라서 파일이 메모리에 캐시됩니다. 캐시 된 파일을 제거하려면 위 명령을 사용하십시오.


-2
  1. 힘내 추가.

  2. 힘내 상태 // 수정중인 파일 확인

    // git reset HEAD --- 무시하려는 파일로 바꿉니다.

  3. git reset HEAD .idea / <-commit // git check status 전에 .idea를 제외시키려는 사람들은 아이디어 파일이 사라지고 준비가 완료되었습니다!

  4. git commit -m ''

  5. 자식 푸시


이것은 OP가 재설정을 원한다고 가정합니다.
소련 프론티어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.