2013-05-08 3 views
11

변경 내용을 현재 폴더와 하위 폴더에만 숨기고 싶습니다. 어떻게 할 수 있습니까?현재 폴더에서 stash 변경 내용을 적용하는 방법

명백한 접근 방식을 시도했는데 (git stash .) 작동하지 않는 것 같습니다.

임시 커밋을 생성하여 나중에 삭제할 수 있음을 알고 있지만 git stash이 특정 폴더를 숨김 지원하는지 알고 싶습니다.

+0

무엇이 오류입니까? – Shobit

+0

@Shobit'git stash' 명령에 대한 도움말 섹션을 얻을 수 있습니다. – stdcall

+0

할 수 없습니다. 'git stash'는 커밋되지 않은 변경을 작업 트리에 두지 않습니다. –

답변

10

git stash은 하나의 명령으로 부분 디렉토리를 저장할 수 없지만 몇 가지 대안이 있습니다.

git stash -p을 사용하여 숨겨 넣으려는 diff 만 선택할 수 있습니다.

git stash -p의 출력이 크거나 스크립트 가능한 솔루션이 필요하고 임시 커밋을 만들면 커밋을 만들 수 있지만 하위 디렉토리에있는 커밋을 제외한 모든 변경 사항을 적용한 다음 변경 사항을 숨길 수 있습니다. 커밋을 되감습니다. 코드에서 :

git add -u :/ # equivalent to (cd reporoot && git add -u) without changing $PWD 
git reset HEAD . 
git commit -m "tmp" 
git stash  # this will stash only the files in the current dir 
git reset HEAD~ 
+0

시도해보세요. 더 좋은 방법이 있어야합니다. – stdcall

+0

@Mellowcandle 문제가 무엇인가요? 왜 작동하지 않습니까? –

+0

프로젝트 트리에서 모든 변경 사항의 diff를 인쇄 한 다음 원하는 특정 폴더에있는 파일을 수동으로 선택해야합니다. 나는 그 폴더에있는 파일들의 이름조차 모른다. 그건 내 문제에 대한 실행 가능한 해결책이 아니야 – stdcall

5

이 당신을 위해 작동합니다 :

cd <repo_root> 
git add .   # add all changed files to index 
cd my_folder 
git reset .  # except for ones you want to stash 
git stash -k  # stash only files not in index 
git reset   # remove all changed files from index 

기본적으로, 폴더 (또는 파일) 당신이 숨기고 싶은 제외 인덱스에 변경된 모든 파일을 추가합니다. 그런 다음 -k (--keep-index)을 사용하여 숨 깁니다. 마지막으로 색인을 다시 시작한 위치로 재설정합니다.

+3

이것은 실제로 뭔가 다른 일을합니다 :'git stash -k '는 색인을 그대로 남겨 두어 색인의 변경 사항은 삭제되지 않지만 새로운 숨김은 ** 색인 **의 변경 사항과 ** 색인 **의 변경 사항을 모두 가지므로 "완전 "어떤 경우라도 숨기십시오. –

-1

SourceTree 또는 TortoiseGit과 같은 GUI git 인터페이스 중 하나를 체크 아웃 할 수 있습니다. 개인적으로 거북이로가는 것은 많은 명령 줄 명령을 시도하는 것보다 훨씬 빠릅니다.

+4

당신은 터미널에서 일하는 것을 보지 못했습니다 ... 정말 빨리 일합니다. – stdcall

관련 문제