git에서 파일을 일시적으로 추적 해제


450

내 컴퓨터에 로컬 자식을 설정했습니다. git을 초기화 할 때 미리 컴파일 된 라이브러리와 바이너리를 추가했습니다. 그러나 현재 개발 중에는 해당 파일을 간헐적으로 체크인하고 싶지 않습니다. repo에서 이러한 파일을 제거하고 싶지 않습니다. 개발을 완료 할 때까지 이러한 파일을 추적하지 않는 방법이 있습니까? (gitgitore는 git에없는 파일에 대해서만 작동하므로 .gitignore를 사용할 수 없다고 생각합니다. 파일 추적을 일시적으로 비활성화하고 싶습니다.)



답변:


724

git update-index 는 원하는 것을해야합니다.

이것은 git에게 파일에 대한 변경 사항을 무시하고 싶다고 알려줍니다.
git update-index --assume-unchanged path/to/file

다시 추적을 시작하고 싶을 때
git update-index --no-assume-unchanged path/to/file

Github 문서 : 업데이트 색인


3
마지막으로 실제로, 감사합니다 :) 내 실수-최선을 다하고-DEV-파일에 대해 작동하는 명령
리처드 드 위트

15
왜 git rm -r --cached <file>입니까?
Ehsan

23
@Ehsan git rm --cached다음 분기에서 동일한 지점이 체크 아웃 된 다른 컴퓨터의 로컬 사본이 삭제되는 것으로 보입니다 . 참조 arlocarreon.com/blog/git/... 와 그 아래 특히 토론을.
mit

3
나를 위해 작동하지 않습니다, 파일을 변경하면 여전히 포함 된 변경 사항에 추가됩니다. 제외 할 수는 있지만 실수로 실수로 추가 될 수 있습니다.
MrFox

8
변경되지 않은 것은이 목적을위한 것이 아닙니다. 이
Appy

265

당신은 당신의 파일을 추적하지 않은 채로 유지할 수 있습니다

git rm -r --cached <file>

파일을 추가하십시오

git add -u

그들은 당신이 원하는 것을 밀거나 행합니다.



git rm --cached .DS_Store 그런 다음 인쇄 rm '../.DS_Store'되고 로컬 파일이 삭제됩니다 ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng

여기에 대답이 있습니다 stackoverflow.com/questions/6919121/…
Weishi Zeng

4
이것은 소스에서 파일을 제거하기 때문에 정답이 아닙니다. OP는 파일의 로컬 변경 사항을 무시하고 파일에 대한 추적을 완전히 제거하지
않으려

2
경고 : 추적을 해제하려는 파일도 제거됩니다. 해결책은 모든 파일을 어딘가에 복사하고 커밋 후에 다시 복사하는 것입니다.
psad

111
git rm --cached

그러나 처음에는 컴파일 된 바이너리 및 외부 종속성을 커밋해서는 안됩니다. 대신 번 들러와 같은 도구를 사용하십시오.


2
디렉토리에 대한 -r 옵션 (재귀)을 잊지
마십시오


7

git-book은 2.4 절 : "Undoing Things"에서 이것을 언급합니다. 기본적으로 수행해야 할 일은 일부 파일의 인덱스 상태를 HEAD 상태, 즉 최신 체크 아웃 (또는 커밋) 상태로 다시 설정하는 것입니다. 이렇게하면 파일을 현재 인덱스에 스테이징하지 않습니다. 이 작업의 명령은 git reset. [1] 입니다 .

따라서 실행해야하는 명령은 다음과 같습니다.

git reset HEAD /path/to/file

최신 버전의 git (1.6 이후로 믿습니다) 은이 명령을 실행할 때 팁으로 제공합니다 git status. 이 버전은 매우 사용자 친화적입니다. 개인 팁 : 몇 개의 파일 만 준비하는 경우을 사용하십시오 git add -i. 대화 형 스테이징 도구가 시작되어 특히 쉽습니다. 또한 실제 상황에서 git을 사용하는 것에 대해 매우 명확하므로 책을 읽는 것이 좋습니다.

[1] http://www.git-scm.com/book


git reset [file]파일을 스테이지 해제하는 가장 간단한 방법 이라는 데 동의 합니다.
Spectral

18
실행 취소와 추적 취소는 서로 다릅니다.
Jaime Sangcap

6

원래 질문에 대한 답변이 아닙니다. 그러나 이것은 누군가를 도울 수 있습니다.

당신이 수행 한 변경 사항을 확인하려면 ( --assume-변경으로 표시되는 파일을 알고 )

git ls-files -v

결과 파일 목록에는 하나의 문자 (예 : H 또는 h)가있는 접두사가 붙습니다. 소문자 (예 : h) 인 경우 파일은 --assume-unchanged


5

각 파일을 개별적으로 선택하지 않고 빌드 폴더 또는 bin 폴더의 모든 파일 을 제거하는 방법을 묻고 있다고 가정합니다 .

이 명령을 사용할 수 있습니다

git rm -r -f /build\*

. 빌드 디렉토리의 상위 디렉토리에 있는지 확인하십시오.
이 명령은 bin / 또는 build / 폴더에있는 모든 파일을 재귀 적으로 "삭제"합니다. delete라는 단어는 git이 해당 파일이 "삭제 된"척하고 해당 파일을 추적하지 않는 것을 의미합니다. git은 실제로 해당 파일을 삭제 모드로 표시합니다.

다음 커밋을 위해 .gitignore가 준비되어 있는지 확인하십시오.
문서 : git rm


1

자식 재설정 [파일]

준비 영역에서 작업 디렉토리로 파일을 다시 가져옵니다.

종종 .gitignore 파일에 노드 모듈을 추가하는 것을 잊어 버렸습니다. 이로 인해 문제가 해결됩니다.


1

이것은 나를 위해 일했다

자식 재설정 HEAD 'filename'


1

모든 Untrack 파일을 제거합니다. 이 터미널 명령을 사용해보십시오

 git clean -fdx

git history가 아닌 디스크에서 파일을 제거합니다.
Leonardo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.