추적되지 않은 파일을 어떻게 숨깁니까?


1434

파일과 새 파일을 변경했으며 다른 작업으로 전환하는 동안 git stash를 사용하여 파일을 치우고 싶습니다. 그러나 git stash 자체는 기존 파일의 변경 사항 만 숨 깁니다. 새로운 파일은 내 작업 트리에 남아서 내 미래의 작업을 복잡하게 만듭니다. 이 추적되지 않은 파일을 숨기려면 어떻게합니까?


27
숨김 파일에 추적되지 않은 파일 만있는 경우 git stash show아무 것도 반환하지 않으므로 파일이 비어있는 것처럼 보일 것입니다. → 떨어 뜨린 숨김을 복구하는 방법 )
Maxime R.

답변:


1921

추적되지 않은 파일 (특히 .gitignore에있는 파일)을 포함하여 작업 디렉토리를 숨기려면이 cmd를 사용하려고합니다.

git stash --include-untracked

자세한 내용은:

2018 년 5 월 17 일 업데이트 :

새로운 버전의 git git stash --all에는 추적되지 않고 무시 된 파일을 포함하여 모든 파일이 숨겨져 있습니다.
git stash --include-untracked더 이상 무시 된 파일을 건드리지 않습니다 (git 2.16.2에서 테스트).

아래의 원래 답변 :

경고, gitignore 파일에 디렉토리 / * 항목이 있으면 파일을 영구적으로 삭제합니다.

버전 1.7.7 부터 추적되지 않은 파일을 스테이징하지 않고 사용 git stash --include-untracked하거나 git stash save -u숨길 수 있습니다.

git add파일을 추가 ( )하고 추적을 시작하십시오. 그런 다음 숨기십시오. 파일의 전체 내용이 새 것이기 때문에 파일이 보관되며 필요에 따라 조작 할 수 있습니다.


4
변경 사항이 준비되지 않은 경우에도 숨김이 여전히 기존 파일을 변경 한 이유는 무엇입니까?
Alan Christensen

6
@ alan-christensen kernel.org/pub/software/scm/git/docs/git-stash.html 의 설명을 읽으십시오 . 요점은 숨겨 놓은 후에 깨끗한 작업 트리를 만드는 것입니다.
Kelvin

3
@Kelvin 내 의견에서 의미하는 바는 준비되지 않은 새 파일은 숨기지 않지만 준비되지 않은 경우에도 기존 파일은 숨기지 않는다는 것입니다. 나에게 일치하지 않는 것 같습니다.
Alan Christensen

11
@ AlanChristensen의 요점은 다른 지점을 체크 아웃하여 덮어 쓸 수있는 것들을 숨기는 것입니다.
jwg

3
여기 상단의 대답을, 나는 당신이 목록을 요청할 것입니다 git stash --include-untracked전에 git stash --all두 가지 이유에 대한 당신의 대답에. 먼저 2019 년에 OP의 질문에 더 잘 대답하고 둘째는 --all은 대부분의 사용자가 원하지 않는 것을 수행하기 때문에 .gitignored 파일을 모두 제거한다는 점에서 다행입니다.
Daniel Flippance

411

git 1.7.7부터는 옵션 (또는 속기)을 git stash허용합니다 . 추적에 추적되지 않은 파일을 포함 시키려면 다음 명령 중 하나를 사용하십시오.--include-untracked-u

git stash --include-untracked
git stash -u

경고, gitignore 파일에 디렉토리 / * 항목이 있으면 파일을 영구적으로 삭제합니다.


15
쿨-마지막으로 매뉴얼 페이지에 설명 된대로 작동합니다. 새 파일을 숨기거나 정리하지 않으면 동작이 손상됩니다.
Steve Bennett

1
내 버전의 git은 1.9.1이며 내가 가지고있는 것이 .gitignore보이지만 여전히 추적 ignoredDirectory되지 않는 ignoredDirectory/*것을 삭제합니다. 추적되지 않은 파일도 디렉토리 만이 아닙니다.
theUnknown777

22
경고를 설명해 주시겠습니까? 왜 그 파일을 삭제합니까? 삭제하고 숨기지 않습니까? 나는 Git을 잠시 동안 사용했지만이 문제에 부딪치지 않았습니다.
Aleksandr Dubinsky

경고가 *.extension항목 에도 적용됩니까 ?
arekolek

3
@ aleksandr-dubinsky, @arekolek- git1.8.3 -u( --include-untracked) 옵션은 추적 git stash show되지 않은 파일을 숨기고 팝업 할 수는 있지만 숨김 파일에있는 추적되지 않은 파일은 나열하지 않습니다
xilef

77

파일을 색인에 추가하십시오.

git add path/to/untracked-file
git stash

색인의 전체 내용과 기존 파일에 대한 단계적 변경 사항이 모두 숨김 상태가됩니다.


이미 색인에있는 변경 사항을 숨기지 않으려면 어떻게해야합니까? 새 파일을 숨길 수 있습니까?
allyourcode

인덱스를 커밋하고 새 파일을 숨기고 커밋을 되돌 리거나 커밋에서 파일을 체크 아웃하십시오. kludgy 솔루션이지만 작동해야합니다.
Gdalya

git add .어떤 이유로 그것을 고려하지 않았다
TheBilTheory

53

git bash에서 추적되지 않은 파일의 숨김은 다음 명령을 사용하여 수행됩니다.

git stash --include-untracked

또는

git stash -u

http://git-scm.com/docs/git-stash

git stash는 작업 공간에서 추적되지 않거나 커밋되지 않은 파일을 제거합니다. 그리고 다음 명령을 사용하여 git stash를 되돌릴 수 있습니다

git stash pop

파일이 로컬 작업 공간에 다시 배치됩니다.

내 경험

.classpath 및 .project 파일이 원격 저장소로 이동하지 않도록 gitIgnore 파일을 수정해야했습니다. 현재 수정 된 .gitIgnore를 원격 저장소에서 이동할 수 없습니다.

.classpath 및 .project 파일은 Eclipse에 중요합니다. 이는 내 Java 편집기입니다.

먼저 나머지 파일을 선택적으로 추가하고 준비를 커밋했습니다. 그러나 수정 된 .gitIgnore 파일과 추적되지 않은 파일이 표시되지 않으면 최종 푸시를 수행 할 수 없습니다. .project 및 .classpath는 보관되지 않습니다.

나는 사용했다

 git stash 

수정 된 .gitIgnore 파일을 숨길 수 있습니다.

.classpath 및 .project 파일을 숨김으로 사용했습니다.

git stash --include-untracked

작업 공간에서 파일을 제거했습니다. 이 파일이 없으면 일장에서 일하는 일을 할 수 없게됩니다. 커밋 된 파일을 원격으로 푸시하는 절차를 완료했습니다. 이 작업이 성공적으로 완료되면

git stash pop

이것은 동일한 파일을 내 작업 공간에 다시 붙여 넣었습니다. 이것은 같은 프로젝트에서 일식으로 일할 수있는 능력을 내게주었습니다. 이 브러시가 오해를 피하기를 바랍니다.


2
IDE 파일에 전역 gitignore를 사용하지 않는 이유는 무엇입니까? 즉. 사용하십시오 ~/.gitignore.
Antti Pihlaja

20

다른 곳에서 말했듯이 대답은 git add파일에 대한 것입니다. 예 :

git add path/to/untracked-file
git stash

그러나 다른 대답으로도 질문이 제기됩니다. 실제로 파일을 추가하지 않으려면 어떻게해야합니까? 내가 알 수있는 한 그리고 다음은 작동 하지 않습니다 .

git add -N path/to/untracked/file     # note: -N is short for --intent-to-add
git stash

다음과 같이 실패합니다.

path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

그래서 어떻게 할 수 있습니까? 글쎄, 당신이 진정으로 파일을 추가해야 하지만 , 당신이 할 수있는 효율적 않은 추가로, 나중에 git rm --cached:

git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop   # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file

그런 다음 이전과 같은 상태 git add(즉, 추적되지 않은 파일;; 파일 path/to/untracked-file을 추적해야 할 다른 변경 사항) 로 작업을 계속할 수 있습니다.

이것에 대한 워크 플로우의 또 다른 가능성은 다음과 같습니다.

git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack

[참고 : @mancocapac에서 코멘트에서 언급 한 바와 같이, 당신은 추가 할 수 있습니다 --exclude-standard받는 사람 git ls-files(그래서 명령 git ls-files -o --exclude-standard).]

... 쉽게 스크립팅 될 수 있습니다-별칭조차도 가능합니다 (zsh 구문으로 표시; 필요에 따라 조정) [또한 파일 이름을 단축 하여이 답변에서 스크롤하지 않고 화면에 맞도록했습니다. 원하는 다른 파일 이름으로 자유롭게 대체하십시오]] :

alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'

후자는 쉘 스크립트 또는 함수로 더 좋을 수 있습니다. 단 , git stash원하지 않는 경우 및 / 또는 상단을 차지하는 대신 특정 숨김을 지정 하려는 경우 매개 변수를 제공 할 수 있습니다. 하나. 아마도 이것은 (위의 두 번째 별칭 대신) [공백없이 스크롤되도록 공백이 제거되었습니다. 가독성 향상을 위해 다시 추가] :popapply

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

참고 :이 형식에서는 숨김 식별자를 제공하려는 경우 작업 인수와 식별자를 제공해야합니다 (예 : unstashall apply stash@{1}또는unstashall pop stash@{1}

물론 .zshrc장기적으로 존재하기 위해 귀하 또는 이에 상응하는 것을 어느 것이 넣었습니까 ?

이 답변이 누군가에게 도움이되기를 바랍니다.


1
git ls-files -o는 내가 관심있는 파일보다 훨씬 많은 파일을 보여줍니다. 다음 git 상태 에서 --exclude-standard 작품을 추가했습니다. git ls-files -o --exclude-standard. 이것에 대한 나의
취지

20

자식 버전 2.8.1 : 다음은 저에게 효과적입니다.

이름없이 수정 및 추적되지 않은 파일을 숨김으로 저장하려면

git stash save -u

수정 된 파일과 추적되지 않은 파일을 숨김 상태로 이름으로 저장하려면

git stash save -u <name_of_stash>

당신은 하나를 사용하고 있습니다 팝업 또는 적용 으로 다음 나중에.

git stash pop

git stash apply stash@{0}

추적되지 않은 파일은 더 이상 추적되지 않은 것으로 표시되었지만 내 컴퓨터에서 추적되지 않은 파일은 제거되지 않았습니다. git stash show그들을 보여주지 않았다. 시도했을 때 git stash apply"오류 : 숨김에서 추적되지 않은 파일을 복원 할 수 없습니다"라는 오류가 발생했습니다. 그러나 파일은 다시 한 번 추적되지 않은 것으로 표시되었지만 추적 된 파일의 변경 내용은 복원되지 않았습니다. 나는 그 파일을 숨김 상태에서 확인하여 개별적으로 복원 할 수 있다고 생각하지만이 솔루션은 내가 바라는 것이 아닙니다.
hBrent

9

다음 을 수행하여 추적되지 않은 파일 숨길 수있었습니다 .

git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}

마지막 파일은 추적 된 파일의 숨김을 표시하여 추적되지 않은 파일 만 숨김 상태로 둡니다.


git stash save -u바로 저장하지 않는 untracked파일을, 그것은 모두 저장 tracked하고 untracked. 나는 당신이하고있는 첫 번째 구원은이 경우 필요하지 않다고 생각합니다. atlassian.com/git/tutorials/saving-changes/에
Drenai

2
문제는 추적되지 않은 파일 만 숨기는 방법입니다. 첫 번째 숨김을 건너 뛰면 무엇을 팝업합니까? 아이디어는 다음과 같습니다. 1) 보관 추적. 2) 추적은 추적되지 않습니다. 3) 팝 추적. 결과 : 추적되지 않은 상태가 유지됩니다.
Oded

3

추적되지 않은 파일을 숨기고 인덱싱 된 파일 (예 : 커밋하려는 파일)을 -k유지하려면 (인덱스 유지) 옵션을-u

git stash -u -k


2

새로운 파일과 추적되지 않은 파일이 "views.json"이라고 가정 해 봅시다. 앱의 상태를 숨겨서 브랜치를 변경하려면 일반적으로 다음을 입력하십시오.

git add views.json

그때:

git stash

그리고 그것은 숨겨 질 것입니다. 그런 다음 지점을 변경할 수 있습니다.

git checkout other-nice-branch

1

이 몇 가지 정답은 여기에 있습니다,하지만 난 그 새로운 전체 디렉토리에 대한 지적 싶었다 'git add path'것입니다 NOT 작업을. 새로운 파일이 많이 있다면 untracked-path 이 있으면 다음을 수행하십시오.

git add untracked-path
git stash "temp stash"

다음과 같은 메시지가 표시됩니다.

Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty

경우 비 추적 경로가 유일한 경로는 넌 보관 한, 숨김 "임시 숨겨 놓은"빈 숨겨 놓은 것입니다. 올바른 방법은 디렉토리 이름뿐만 아니라 전체 경로를 추가하는 것입니다 (예 : '/'로 경로를 끝내십시오).

git add untracked-path/
git stash "temp stash"

적어도 내 시스템에서는 당신의 가정이 잘못되었습니다. 슬래시없이 작동합니다! 빈 디렉토리는 어쨌든 무시됩니다. (macos git 2.6.2)
phobie

0

git에게 파일의 모든 내용을 준비 영역에 커밋하지 않고 파일이 존재한다고 알리면이 문제를 해결할 수 있다고 생각했습니다 git stash. Araqnid 는 전자를 수행하는 방법을 설명 합니다.

git add --intent-to-add path/to/untracked-file

또는

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

그러나 후자는 작동하지 않습니다.

$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

1
내가 알 수있는 한, 전자도 작동하지 않습니다. 이 문제에 대한 해결책 은 내 대답 을 참조하십시오 .
lindes

0
git stash --include-untracked

추가 한 파일과 준비하지 않은 파일도 저장되므로 가장 좋아하는 파일입니다.


0

새로 만든 파일과 함께 Sourcetree를 사용하는 동안 비슷한 문제가 발생했습니다 (스 태쉬에도 포함되지 않음).

처음에 'stage all'을 선택한 다음 새로 추가 된 구성 요소를 추적하여 숨김에 포함시킵니다.


이 질문은 11 살이고 이미 14 답변이 있습니다. 게시하기 전에 읽어 보셨습니까?
Mickael B.

-7

나는 같은 기능을 숙고하고 싶었다. 그러나 시간이 지남에 따라 실제로 필요하지 않은 것으로 나타났습니다. 숨김 상태가되면 새 파일을 남겨 두는 것이 좋습니다. 그들에게 "나쁜"것은 일어날 수 없습니다 (다른 것을 체크 아웃하면 git은 오류가 발생하고 기존의 추적되지 않은 파일을 덮어 쓰지 않습니다)

일반적으로 git stash와 사이의 시간 프레임 git stash pop은 다소 작기 때문에 추적되지 않은 파일을 다시 빠르게 필요로합니다. 따라서 git status다른 작업을 수행하는 동안 파일이 표시되는 불편 함이 (와 사이 git stashgit stash pop) 불편 함이 작업으로 인한 불편 함보다 작고 추적되지 않은 파일을 당신의 숨결.


15
프로젝트에 따라 다릅니다. 추적되지 않은 파일은 (반으로 쓴) 단위 테스트이고 테스트 하네스는 디렉토리에서 모든 단위 테스트를 실행합니다. 기타
Steve Bennett

1
또 다른 예는 두 대의 컴퓨터에서 작업하고 데이터를 A에서 B로 이동할 수 있지만 B에서 A로 이동할 수없는 경우입니다. B에서 처음 발생하는 문제를 해결하기 위해 새 코드를 작성하는 경우 A와 B 모두에서 원하는 경우 B에서 파일을 숨기고 A에서 해당 파일을 다시 만든 다음 번들로 가져올 때 숨김 버전을 git diff하여 사용자가 아닌지 확인할 수 있습니다. 실수하다
Gdalya

7
파일이 한 지점에서 추적되지 않는다고해서 다른 지점에서 추적 된 파일과 충돌하지는 않습니다.
jwg

3
간단한 카운터 예 : .conf.d 디렉토리의 구성 파일 또는이 파일 만 있으면 소프트웨어의 동작이 수정됩니다.
fotanus

물론 기능이 필요합니다. 추가 예를 들어, 숨기려는 로컬 추적되지 않은 파일이있는 경우 한 지점에서 다른 지점으로 전환 할 수 없습니다.
Demitrian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.