하나의 파일 만 보관


176

단일 파일의 변경 사항 만 숨길 수 있기를 원합니다.

git stash save -- just_my_file.txt

위의 방법으로는 작동하지 않습니다. 대안이 있습니까?



에 대한 하나의 파일 대신 저글링 숨김 명령, 훨씬 더 쉽게 접근 방식은 복사하는 것입니다 단일 파일을하고 당신이 그것을 돌려 보내야 할 때 단순히 원본을 복사. 예. cp just_my_file.txt just_my_file.txt.manualstash 이제 모든 체크 아웃과 작업을 수행 할 수 있으며 복사본이 "추적되지 않은 파일"이므로 지점과 커밋간에 문제없이 이동할 수 있습니다. " 단일 파일 병합"을 원하는 지점 / 커밋에있을 때 mv just_my_file.txt.manualstash just_my_file.txt변경 사항을 검토하고 필요한 경우 커밋 할 수 있습니다.
Dimitry K

답변:


173

나는 stash -p아마도 당신이 원하는 선택 이라고 생각 하지만, 앞으로 더 까다로운 일이 발생할 경우를 대비하여 다음을 기억하십시오.

Stash실제로는 조금 더 복잡한 branch집합에 대한 매우 간단한 대안 입니다. Stash는 빠르게 물건을 옮기는 데 매우 유용하지만 더 많은 두통과 노력없이 지점으로 더 복잡한 것을 수행 할 수 있습니다.

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

가서 원하는 것을하고 나중에 간단하게 rebase그리고 / 또는 mergetmpbranch를 실행하십시오. 은닉이 허용하는 것보다 더 신중하게 추적해야 할 때 그렇게 많은 추가 작업 이 아닙니다 .


2
거꾸로, 당신은 큰 고통없이 스테이크를 실제 지점으로 바꿀 수 있습니다.
Wes Hardaker 2018 년

90

숨김 변경 사항이있는 메시지를 지정하지 않으려면 파일 이름을 이중 대시 뒤에 전달하십시오.

$ git stash -- filename.ext

추적되지 않은 / 새 파일 인 경우 먼저 준비해야합니다.

그러나이 경우 않는 , 사용하는 메시지를 지정합니다 push.

git stash push -m "describe changes to filename.ext" filename.ext

두 가지 방법 모두 git 버전 2.13 이상에서 작동합니다


1
결정 변경을 개정 할 때 대답은 나에게 가장 정직 같다 : git stash -- filename.ext, git commit --amend, git stash pop
브랜든 듀이

1
나는 이것이 매우 새로운 기능에 의존해야한다고 생각합니다. git 2.1.4에서는 작동하지 않습니다.
Richard Smith

스 태쉬가 저장되는 상태에서 이상한 동작이 발생하지만 같은 파일이 동시에 스테이징에 추가됩니다 (git v2.20.1)
paradroid

58

git stash -p( 와 유사)을 사용하여 한 줄을 대화식으로 숨길 수 있습니다 git add -p.

파일 이름은 사용하지 않지만 보관 d하려는 파일에 도달 할 때까지 다른 파일을 건너 뛰고 파일의 모든 변경 사항을 숨길 수 있습니다 a.


3
숨기고 싶지 않은 파일이 많은 경우 시간이 오래 걸립니다.
jjj

23
이 변경되면 모르겠지만 현재의 git 2.14.1당신은 파일 이름을 지정할 수 있습니다git stash -p <filename>
뮤온

21

가장 좋은 방법은이 파일 이외의 모든 것을 준비하고 인덱스를 유지하도록 stash에 지시하여 스테이지되지 않은 파일 git stash save --keep-index을 숨기는 것입니다.

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

Dan이 지적한 것처럼, thefiletostash숨김 파일로 재설정되는 유일한 파일이지만 다른 파일도 숨겨져 있기 때문에 원하는 파일이 아닙니다.


2
이것은 인덱스를 동일한 상태로 유지하지만 인덱스에있는 파일도 숨기지 않습니까? 즉,이 작업을 수행 한 후 색인을 현재 분기로 커밋 한 다음 다른 분기로 전환하고 수행 git stash pop하면 우리가 숨기고 싶은 파일뿐만 아니라 모든 파일을 적용하지 않습니까?
Dan Molding

@ DanMoulding : 당신은 절대적으로 옳습니다. 나는 이것에 대해 생각하지 않았습니다.
CharlesB

16

'git stash'를 사용할 때마다 실제로 'discard changes'를 의미하는 경우 (그리고 실제로 git stash를 사용하여 일시적으로 숨기지 마십시오),이 경우 사용할 수 있습니다

git checkout -- <file>

git stash는 분기 및 작업에 대한 빠르고 간단한 대안입니다.


수정 된 모든 변경 사항을 단일 파일로 제거하려는 경우 이것이 최선의 방법이라고 생각합니다.
Mohamed Haseel

그리고 난이 특정 작업에 대한 최고의 대답 것
자 키르 후세인

6
이 질문은 충분히 명확했으며 한 파일의 변경 사항을 되 돌리는 방법을 묻지 않았습니다. 공감.
Richard Smith

이것은 대안으로 명확하게 보여주는 좋은 답변입니다. 그러나 일부 사람들은 다운 보트를 학대 기능으로 사용할만큼 완고 할 것입니다. +1
Mukul Jain

@ MukulJain 실제로 파일 당 숨김 파일을 매우 일시적인 방식으로 사용해야했습니다 (기본적으로 하나의 파일에 대해 동일한 행에 영향을 미치는 두 개의 커밋에서 일부 변경 사항을 분리). 실제로 공감하지는 않을 것입니다.
Paul Stelian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.