특정 파일을 어떻게 git 숨김 할 수 있습니까?


1654

저장하려는 숨김에서 현재 수정 된 다른 파일을 그대로두고 특정 파일을 숨기려면 어떻게해야합니까?

예를 들어, git status가 나에게 다음을 제공한다면 :

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

app / views / cart / welcome.thtml 만 숨기고 싶습니다. 어떻게해야합니까? 다음과 같은 것 (물론 작동하지 않음) :

git stash save welcome_cart app/views/cart/welcome.thtml

57
"중복 가능성"질문에 현재 수락 된 것으로 표시된 오답이 있습니다.
Penguin Brian

6
사용 git checkout -- filename하고 원래 상태로 되돌릴 수 있습니다 .
visualex

7
그것은 참으로 되돌아갑니다 @visualex,하지만 그것을 숨기고
예스퍼

2
Re Penguin Brian의 의견 : 예, "가능한 중복"질문에 대한 대답은 최신 버전의 git에 대한이 질문과 연결됩니다.
Mars Mars

1
$ git stash-filename.ext
Linielson

답변:


2511

편집 : git 2.13부터 특정 경로를 숨김에 저장하는 명령이 git stash push <path>있습니다. 예를 들면 :

git stash push -m welcome_cart app/views/cart/welcome.thtml

이전 답변 :

git stash --patch(또는 git stash -p) 을 사용하여이를 수행 할 수 있습니다. 변경된 각 덩어리가 표시되는 대화 형 모드로 들어갑니다. 사용은 n당신이 숨기고 싶지 않아 파일을 건너 뛰려면 y당신이 은닉하려는 그 하나가 발생할 때, 그리고 q종료하고 unstashed 나머지 심술쟁이를 떠나. a표시된 덩어리와 해당 파일의 나머지 덩어리를 숨 깁니다.

가장 사용자 친화적 인 접근 방식은 아니지만 실제로 필요한 경우 작업을 완료합니다.


32
번거롭지 만 작동합니다. 단계별 변경 사항 만 숨긴 다음 나중에 팝업 될 때 변경 사항이 비 스테이지 작업 트리로 이동하는 빠른 방법이 있었으면합니다.
James Johnston

56
@JamesJohnston git stash --keep-index을 사용하면 모든 단계되지 않은 변경 사항을 숨길 수 있습니다 (찾고있는 것과 반대). stackoverflow.com/a/8333163/378253
nimser 2013-10-16

123
a대신 말하면 y그 덩어리 + 파일의 나머지 부분을 숨길 것이며 훨씬 빠릅니다.
i_am_jorf 2013

53
트윗 담아 가기 또한 d반대의 작업을 수행합니다. 즉, 현재 파일에 더 이상 덩어리를 숨기지 않습니다. 실제로 ?가능한 모든 옵션을 표시합니다.
omnikron 2013-12-05

9
@Vencovsky "메시지"를 의미하며 숨김에 대한 선택적 설명을 지정하는 데 사용됩니다. 필요하지 않은 경우 -m welcome_cart부품을 제외 할 수 있습니다 .
svick

337

나는 일반적으로 숨기고 싶지 않은 색인 변경 사항을 추가 한 다음 --keep-index옵션으로 숨 깁니다 .

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

마지막 단계는 선택 사항이지만 일반적으로 원합니다. 색인에서 변경 사항을 제거합니다.


경고 주석에서 언급했듯이 이것은 스테이징 및 비 스테이징 모두를 숨김에 넣습니다. 은 ( --keep-index는) 숨김이 완료된 후 인덱스를 그대로 둡니다. 이로 인해 나중에 숨김을 팝할 때 병합 충돌이 발생할 수 있습니다.


5
--patch 옵션을 사용하여 진행하고 싶지 않은 변경 사항이 많은 경우 허용되는 답변보다 훨씬 낫습니다.
quux00

181
아니오, 이것은 모든 것을 스테이징 및 언 스테이지에 보관합니다. 은 ( --keep-index는) 숨김이 완료된 후 인덱스를 그대로 둡니다. 따라서 이것은 AFAICT라는 질문에 대한 유효한 대답이 아닙니다.
Raman

2
- (대신 unstaged 변경의 변경 사항을 개최 보관 한)이의 역을 수행하는 솔루션에 대한 레이첼의 질문 @에 내 대답을 참조하십시오 stackoverflow.com/questions/3040833/...
JesusFreke

3
추가 한 파일을 커밋하지 않고 은닉 한 파일을 되돌리려면 git stash; git stash pop stash@{1}.
yndolok 2013

8
경고 : @Raman의 요점을 기록하십시오. 이것은해야 할 일을하지 않습니다. 이 숨김에서 동일하게 변경을 넣어 것입니다 작업 트리를 둡니다. 나중에 숨김을 꺼내려고하면 병합 충돌이 발생할 가능성이 높으며 종종 혼란스럽고 고치기가 어렵습니다.
rjmunro 2014

28

svick의 답변에 추가하기 위해 -m옵션은 단순히 숨김에 메시지를 추가하며 전적으로 선택 사항입니다. 따라서 명령

git stash push [paths you wish to stash]

완벽하게 유효합니다. 예를 들어 src/디렉토리의 변경 사항 만 숨기려면 다음을 실행하면됩니다.

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