Git의 작업 디렉토리에서 변경 사항을 유지하면서 변경 사항을 저장하십시오


146

git stash변경 사항을 숨기고 작업 디렉토리에도 유지 하는 명령이 있습니까? 기본적으로 git stash; git stash apply한 단계에?




1
@MariuszPawelski 아니요, 실제로는 아닙니다. 그 질문은 내 것보다 더 구체적입니다. 내 질문에 대한 대답은 단순히 "아니오"였습니다. 링크를 주셔서 감사합니다, 그것은 일부 사람들에게 또는 나중에 나 자신에게 도움이 될 수 있습니다.
Michael Dorst

분명히, 파일을 그대로 유지해야 할 필요가 없기 때문에 내 질문은 다릅니다. 나는 단지 대안을 찾고 있었다 git stash && git stash apply. 당신은 그 질문에 대한 답이 나의 것과는 다르다는 것을 알게 될 것입니다.
Michael Dorst

아, 맞습니다. 질문은 좀 덜 구체적입니다. 그러나 그 답변도 귀하의 요구 사항을 충족시키기 때문에 그 질문을했습니다. 이렇게하면이 질문이 사이드 바에 "연결됨"으로 표시되므로 누군가에게 도움이 될 수 있습니다.
마리우스 파웰 스키

답변:


157

가치있는 것을 위해, 이것을 수행하는 또 다른 방법은 유지하려는 변경 사항을 준비한 다음 다음을 사용하여 모든 것을 숨기는 것입니다 --keep-index.

$ git add modified-file.txt
$ git stash push --keep-index

위의 명령은 모든 것을 숨기지 만 파일은 작업 디렉토리에 준비되어 있습니다.

git-scm공식 Linux Kernel Git 문서git stash 에서 :

--keep-index옵션을 사용하면 인덱스에 이미 추가 된 모든 변경 사항이 그대로 유지됩니다.


3
이것은 내가 본 --keep-index에 대한 가장 간단한 설명입니다. 나는 그것이 문서에 쓰여진 방식으로 의미를 얻지 못했습니다.
40 명의 형사

52

git stash그런 다음 git stash apply(git stash && git stash apply )는 파일을 숨기고 그 뒤에 즉시 숨길 수 있습니다. 결국에는 숨김 상태와 작업 디렉토리에서 변경 사항이 있습니다.

별명을 원하면 별명을 작성할 수 있습니다. 다음과 같은 것을 넣으십시오 ~/.gitconfig.

[alias]
    sta = "!git stash && git stash apply"

이 방법의 단점은 모든 파일이 보관되고 재생성된다는 것입니다. 이는 해당 파일의 타임 스탬프가 변경됨을 의미합니다. (을하기 전에 파일을 열었을 때 파일을 저장하려고 할 때 Emacs가 불만을 제기 git sta하고 사용 중이 make거나 친구 인 경우 불필요한 재 빌드가 발생할 수 있습니다 .)


1
또한, 차이 무엇 git stash; git stash applygit stash && git stash apply?
Michael Dorst


2
@anthropomorphic 이해 git config --global alias.sta "!git stash && git stash apply"야합니다.

이 별칭을 git stash save인수와 함께 사용하도록 수정 한 다음 어떻게해야 git stash apply합니까?
스피닝

1
@JaySidri, bang은 git 인수 자체가 아니라 실제로 외부 명령임을 의미합니다. docs에 따르면 : "알다시피, Git은 단순히 새로운 명령을 사용자가 원하는대로 대체합니다. 그러나 Git 하위 명령이 아닌 외부 명령을 실행하고 싶을 수도 있습니다. ! 캐릭터."
madhead

10

실제로 사용할 가능성이있는 답변의 작은 향상.

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"

참고 : "git add"없이는 작동하지 않습니다 (예 : 수정되었지만 파일 커밋에 추가되지 않음)
alex_1948511

4

숨기는 것이 아니라 FWIW가 도움이 될 수있는 트릭이 있습니다.

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset HEAD~        (Now go back to where you've left with your working dir intact)

그리고 지금 당신은 당신의 처분에 커밋 태그가 붙어 있습니다. git stash pop어쨌든 할 수는 없지만 패치를 만들거나 파일을 재설정하는 등의 작업을 수행 할 수 있습니다. 작업 디렉토리 파일은 그대로 BTW로 남아 있습니다.


3

당신은 사용할 수 있습니다 git stash create감춰 커밋 만든 다음 사용 마리화나에 저장하기 git stash store:

git stash store $(git stash create) -m "Stash commit message"

더 편리하게하기 위해 자식 별칭에 저장할 수 있습니다.

git config --global alias.stash-keep '!git stash store $(git stash create)'

git stash-keep -m "Stash commit message"

이것이 모든 것을 하는 git stash push것은 아닙니다 . 예를 들어, 커밋에 분기 이름을 추가하지 않습니다 (예 : " stash@{0}: On myBranch: Stash commit message").


1
이것을 사랑하십시오 !! 그러나 한 가지 수정 : 커밋 해시 앞에 와야 man git-stash한다고 말합니다 -m <message>. 최신 git의 변경 사항을 제외하고.
tanius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.