git update-index 실행 취소-변경되지 않은 <파일>


462

Git은 특정 디렉토리 / 파일을 보거나 추적하는 것을 무시합니다. 당신은 이것을 실행합니다 :

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

이제 어떻게 다시 실행 취소 할 수있게 되나요? (가정이라고 가정합시다.)


5
git의 성능이 문제가되지 않는 한 skip-worktree가 변경되지 않은 것보다 사용하는 것이 더 나을 것 같습니다. stackoverflow.com/questions/13630849/…
— GreenAsJade

답변:


587

변경되지 않은 것으로 설정된 undo / show 디렉토리 / 파일을 얻으려면 다음을 실행하십시오 .

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

이것을 assume-unchanged실행 하는 디렉토리 / 파일 목록을 얻으려면 :

git ls-files -v|grep '^h'


7
grep 구문을 약간 개선하면 첫 번째 문자 태그가 'H'/ 'h'이외의 문자 일 수 있으므로 '^ [az]'를 사용하여 무시 된 모든 파일을 잡을 수 있습니다. 에서 git-scm.com/docs/git-ls-files :이 옵션을 식별 각 라인의 시작에서 다음 태그 (뒤에 공백)으로 파일 상태 : H :: 캐시 S : 스킵 - worktree의 M : : 병합되지 않은 R :: 제거 / 삭제 C :: 수정 / 변경 K :: 종료 예정? :: 기타
— Bdoserror

8
또 다른 유용한 트릭은 git ls-files -v|grep '^h'|cut -c3-"h"접두사없이 파일 이름 만 제공합니다.
— Retsam

9
더 이상 파일을 모른다면을 assume-unchanged사용하십시오 git update-index --really-refresh. 이 명령을 사용하면 git ls-files먼저 파일을 찾을 필요가 없습니다 .
— theDmi

102

이것이 자주 사용하는 명령 인 경우 별명을 갖는 것도 고려할 수 있습니다. 전 세계에 추가 .gitconfig:

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged

별칭을 설정하는 방법 (아직 모르는 경우) :

git config --configLocation alias.aliasName 'command --options'

예:

git config --global alias.hide 'update-index --assume-unchanged'
git config... etc

이 파일을에 저장 한 후 .gitconfig청소기 명령을 실행할 수 있습니다.

git hide myfile.ext

또는

git unhide myfile.ext

이 자식 문서 는 매우 도움이되었습니다.

주석에 따르면 현재 숨겨진 파일 을 찾는 데 도움이되는 별칭입니다 .

[alias]
    hidden = ! git ls-files -v | grep '^h' | cut -c3-

2
이 별명도 편리합니다.hidden = ! git ls-files -v | grep '^h' | cut -c3-
— seanf

42

git update-index 기능에는 다음과 같이 입력 할 수있는 몇 가지 옵션이 있습니다.

git update-index --help

여기서는 update-index 함수로 처리하는 방법에 대한 다양한 옵션을 찾을 수 있습니다.

[파일 이름을 모르는 경우]

git update-index --really-refresh 

[파일 이름을 알고있는 경우]

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

무시 목록에 추가 된 모든 파일을 되돌립니다.

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

git update-index --really-refresh, 팁 덕분에 내가 만든 모든 변경 사항을 취소합니다
— Sérgio

git update-index --no-assume-unchanged <file>내 생명을 구했어
— Cagatay Ulubay

38

나는 옵션 --assume-unchanged이 보이지 않기 때문에 당신이 의미한다고 가정 합니다 --assume-changed. 의 반대는 --assume-unchanged입니다 --no-assume-unchanged.


32

@adardesign, @adswebwork 및 @AnkitVishwakarma의 탁월한 원본 답변과 @Bdoserror, @Retsam, @seanf 및 @torek의 주석을 추가 문서 링크 및 간결한 별칭으로 합성하려면 ...

기본 명령

변경되지 않은 것으로 가정 된 파일 을 다시 정상으로 재설정 하려면 :

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

변경되지 않은 모든 파일 을 나열 하려면 다음 을 수행 하십시오 .

git ls-files -v | grep '^[a-z]' | cut -c3-

변경되지 않은 모든 가정 파일을 다시 정상으로 재설정 하려면 :

git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --

참고 : 다른 곳에서 나열된이 명령은 변경되지 않은 모든 가정 파일을 더 이상 재설정하지 않는 것으로 보입니다 (이전에는 솔루션으로 사용했으며 이전에 솔루션으로 나열했습니다).

git update-index --really-refresh

바로 가기

git에서 이러한 일반적인 작업을 쉽게 수행하려면 사용자 를 위해 다음 별칭 섹션을 추가 / 업데이트하십시오 .gitconfig(예 : ~/.gitconfig* nix 또는 macOS 시스템).

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-

1
의 경우 다음을 git hidden사용하여 쉘 별명이나 스크립트없이 동일한 효과를 얻을 수 있습니다 !.hidden = ! git ls-files -v | grep '^h' | cut -c3-
— seanf

1
--really-refresh인덱스 파일에서 변경되지 않은 플래그를 지우지 않습니다.
— torek

감사합니다, @torek! 설명하신 동작을 확인한 후 "모두 재설정"사례에 대한 다른 솔루션으로 답변을 업데이트했습니다.
— Will Cain

20

적용된 모든 파일을 실행 취소하려는 경우 캐시 된 상태뿐만 아니라 소문자로 문자로 표시하는 상태뿐만 아니라 상태가 변경되지 않은 것으로 가정하면 다음 명령을 사용할 수 있습니다.

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -v 모든 파일을 상태로 인쇄합니다
  2. grep '^[a-z]' 파일을 필터링하고 변경되지 않은 것으로 가정합니다.
  3. cut -c 3- 상태를 제거하고 경로 만 남겨두고 3 번째 문자에서 끝까지 자릅니다.
  4. tr '\012' '\000' 줄 끝 문자 (\ 012)를 0 문자 (\ 000)로 바꿉니다.
  5. xargs -0 git update-index --no-assume-unchangedgit update-index --no-assume-unchanged실행 취소 하기 위해 0으로 구분 된 모든 경로를 전달합니다.

이것은 매우 유용합니다. 자세한 정보 감사합니다!
— Chamithra Thenuwara

11

에 추가 @adardesign하면 추가 된 모든 파일을 재설정하려는 경우, 응답의 assume-unchanged목록으로 no-assume-unchanged한 번에 다음을 수행 할 수 있습니다 :

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

이것은 grep ie에서 출력 된 두 문자를 "h "제거한 다음 파일 이름에있을 수있는 공백을 피하고 || true루프의 일부 파일에 오류가있는 경우 명령이 조기에 종료되지 않도록합니다.


4

Git Extensions를 사용하는 경우 다음 단계를 따르십시오.

  1. 커밋 창으로 이동하십시오.
  2. 작업 디렉토리 변경 이라는 드롭 다운을 클릭하십시오 .
  3. 선택 보기 assummed - 변경되지 않은 파일의 옵션을 선택합니다.
  4. 추측을 취소 할 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
  5. 변경 안함을 선택 하지 마십시오 .

끝났습니다.


0

여기서 다루지 않은 것은 없습니다. 그러나 내 2 센트를 추가하고 싶습니다. 때로는 빌드를 실행하고 많은 파일을 변경 한 다음 무언가 작업을 원 하므로이 명령이 실제로 많은 도움이됩니다.

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

다른 사람도 유용하게 사용하기를 바랍니다.


.gitignore빌드 아티팩트를 무시 하는 데 사용 하면 이점이 있다고 생각합니다 .
— Nick

1
나는 .gitignore있지만 때때로 그것은 내 경험으로는 충분하지 않습니다. 그러나 나는 당신이 이것을 말하는 맥락을 이해합니다.
— Tyagi Akhilesh 2016 년

0

Windows에서 나에게 도움이되는 해결책은 없습니다 . 파일 상태 H보다는 자본을 사용하는 것으로 보이며 hgrep 명령에는 ^줄의 시작과 다음 문자 무시를 나타내는 추가 캐럿이 필요합니다 .

Windows 솔루션

  1. Git Bash를 열고 관련 최상위 디렉토리로 변경하십시오.
  2. git ls-files -v | grep '^^H' 캐시되지 않은 모든 파일을 나열
  3. git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree 를 통해 수행 된 모든 파일을 건너 뛰는 파일을 실행 취소하는 방법 update-index --skip-worktree
  4. git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged 를 통해 수행 된 모든 파일을 건너 뛰는 파일을 실행 취소하는 방법 update-index --assume-unchanged
  5. git ls-files -v | grep '^^H' 캐시되지 않은 모든 파일을 다시 나열하고 위의 명령이 작동했는지 확인하려면 아무것도 반환하지 않아야합니다.

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