git update-index --skip-worktree 실행 취소


148

얼마 전에 나는 git에 의해 추적 된 파일의 변경 사항을 무시하기 위해 이것을했다.

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

이제 실제로 해당 파일의 변경 사항을 소스로 커밋하려고합니다. 효과를 취소하려면 어떻게합니까 skip-worktree?


11
'skip-worktree'상태의 파일 목록을 얻는 방법에 관심이 있습니까?
troex

답변:



35

에 따르면 http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html 사용

git ls-files -v

특수 문자로 표시된 "변경되지 않은 것으로 가정"및 "건너 뛰기 작업 트리"파일을 보려면 "skip-worktree"파일은로 표시됩니다 S.

편집 : @amacleod가 언급했듯이 모든 숨겨진 파일을 나열하기 위해 별칭을 만드는 것은 좋은 트릭이므로 기억할 필요가 없습니다. alias hidden="git ls-files -v | grep '^S'".bash_profile에서 사용 합니다. 잘 작동합니다!


9
산뜻한. git ls-files -v | grep '^S'skip-worktree로 "숨겨진"파일 만 나열 하는 데 사용할 수 있습니다 . 해당 명령에 대해 "숨겨진"별칭을 만들려고했지만 별칭에 파이프 리디렉션을 넣는 것은 효과가없는 것 같습니다.
amacleod

5
@amacleod를 사용하십시오 !. 이 [alias] ignored = !git ls-files -v | grep "^S"테스트 와 같이 작동합니다.
Steven Lu

@amacleod Windows에 대한 대체 명령을 제안 할 수 있다고 가정하지 않습니까?
Steve Chambers

1
@SteveChambers, 설치 부족, grep모르겠습니다. 껍질에 따라 다릅니다. Git Bash와 함께 제공됩니다 grep.
amacleod

1
훌륭합니다, @amacleod-고맙습니다-단지 내 길에 없었습니다. Windows에서이 작업을 수행하기 위해 변경해야 할 유일한 것은 인용 스타일이었습니다. '작동하지는 "않았지만, 즉git ls-files -v | grep "^S"
Steve Chambers

17

적용된 모든 파일을 실행 취소하려면 작업 트리 건너 뛰기를 수행하십시오. 다음 명령을 사용할 수 있습니다.

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  1. git ls-files -v 모든 파일을 상태로 인쇄합니다
  2. grep -i ^S 파일을 필터링하고 작업 트리 건너 뛰기 (S) 또는 작업 트리 건너 뛰기 만 선택하고 변경되지 않은 것으로 가정합니다. -i는 대소 문자 구분을 무시합니다.
  3. cut -c 3- 상태를 제거하고 경로 만 남겨두고 3 번째 문자에서 끝까지 자릅니다.
  4. tr '\012' '\000' 줄 끝 문자 (\ 012)를 0 문자 (\ 000)로 바꿉니다.
  5. xargs -0 git update-index --no-skip-worktreegit update-index --no-skip-worktree실행 취소 하기 위해 0으로 구분 된 모든 경로를 전달합니다.

1
이것이 가장 좋은 답변입니다
Dev

이 답변은 순금입니다!
요시코

7

@ GuidC0DE 답변을 바탕으로 Powershell 버전이 있습니다 ( posh-git 사용 )

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

그리고 파일을 숨기는 반대 명령도 참조하십시오.

git update-index --skip-worktree $(git ls-files --modified)

3

거북이 힘내를 사용하는 사람들을 위해 :

  1. 폴더 나 특정 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 TortoiseGit > Check for modifications
  2. 만 확인하십시오 Show ignore local changes flagged files. 무시한 파일 (또는 폴더를 마우스 오른쪽 버튼으로 클릭 한 경우 무시한 모든 파일)이 표시됩니다.
  3. 파일을 마우스 오른쪽 버튼으로 클릭하고 Unflag as skip-worktree and assume-unchanged

3

Bash 별칭을 좋아하는 모든 사람들을 위해 다음은 모두를 지배하는 세트입니다 (C0DEF52 기반)

alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'

0

이 답변은 Windows를 사용하는 기술이 적은 사람들을 대상으로합니다.

"skip-worktree"를 클릭 한 파일을 기억하지 못하거나 모르는 경우 다음을 사용하십시오.

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

문제를 해결하려면

당신은 파일로 이동-> 마우스 오른쪽 버튼으로 클릭-> 이전 버전으로 복원-> 상단에 "git"탭을 클릭-> "skip-worktree"체크 박스의 선택을 해제-> 하단에있는 "적용"을 클릭

파일이 너무 많아서 직접 고치기에는 다른 답변을 참조해야합니다.

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