git stash가 분기별로 고유하지 않은 이유는 무엇입니까?


81

한 지점에서 다음 지점으로 변경 사항을 이동할 수 있다고 생각하지만 그게 체리 따기의 목적이며 변경 사항을 커밋하지 않는 경우 변경 사항을 이동해서는 안됩니까?

때때로 잘못된 지점에 잘못된 숨김을 적용하여이 질문에 대해 궁금해했습니다.


13
Git에는 커밋되지 않은 변경 사항을 브랜치 (또는 헤드)와 연결할 수있는 것이 누락되었습니다. 한 번에 두 개 이상의 브랜치에 대한 작업이 진행 중일 때 이것은 분명해집니다. 여기에 대한 답변이 지적했듯이 stash에는 그럼에도 불구하고 특성에 따라 유용한 응용 프로그램이 있습니다. git stash-here누군가?
Blake Taylor

답변:


69

앞서 언급했듯이 "분기 별 숨김"을 원하면 기존 분기에서 분기 된 새 분기를 정말로 원합니다.

또한 숨김을 사용하면 작업중인 브랜치로 가져올 수 있다는 사실 외에도 모든 것을 커밋하기 전에 브랜치 를 전환 할 수 있습니다 . 이것은 작업 복사본 을 체리 따기만큼 일반적인 의미에서 체리 따기에는 유용하지 않습니다 .

F.ex. 기능 브랜치에서 작업하는 동안 해당 브랜치와 관련이없는 코드에서 사소한 버그 나 외관상의 불순물을 종종 발견합니다. 글쎄, 나는 바로 그것들을 고친다. 커밋 할 때가되면 관련 변경 사항을 선택적으로 커밋하지만 수정 사항과 화장품은 적용하지 않습니다. 대신 나는 그것들을 숨겨서 안정에 대한 마이너 수정 브랜치로 전환 할 수 있습니다. 그런 다음 스 태쉬를 적용하고 각 마이너 수정을 개별적으로 커밋 할 수 있습니다. (문제의 변경 사항에 따라 일부를 다시 숨기고 다른 기능 브랜치로 전환하여 적용 합니다 .)

이를 통해 작업 할 때 프로그래밍 모드에 깊이 들어갈 수 있으며 코드의 적절한 라이브러리에 대해 걱정할 필요가 없습니다. 그런 다음 정신적 휴식을 취하면 돌아가서 변경 사항을 올바른 선반으로 신중하게 분류 할 수 있습니다.

숨김이 전역 적이 지 않은 경우 이러한 유형의 워크 플로는 수행하기 훨씬 더 어려울 것입니다.


4
동의하지 않습니다 : As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.. 특히 같은 프로그램의 두 가지 버전을 자주 전환하고 전체를 실행하는 make데 10 분이 걸립니다. 빌드 된 바이너리를 분기별로 숨길 수 있다면 매우 좋을 것입니다. 그리고 저는 확실히 로그 나 분기에 바이너리를 원하지 않습니다.
Clément

왜? (난 당신이, 당신은 단지 그것을 모르는 것 같아요.)
아리스토텔레스 Pagaltzis에게

21

Git 1.6부터는 다음을 사용하여 브랜치에 스 태시를 적용 할 수 있습니다.

git stash branch name_of_new_branch

Git에서 새 브랜치를 생성하고 확인해보세요! 자세한 내용은

  • 자식 책

  • info git-stash그리고 option =에서 검색하십시오 branch.

나는 당신이 사용하여 주위에 스테이시를 움직일 수 있다고 생각합니다

git stash branch <branch | new_branch> [<stash>]

보관함 목록을 보려면

git stash list

참고


감사합니다! 나는 당신이 가지에 은닉 물을 적용 할 수 있다는 것을 몰랐지만 이것은 결국 행동으로 보인다. 한 지점에 은닉처가있는 경우 다른 지점을 확인하고 거기에서 작업을 수행했습니다. 결과적으로 마스터로 리베이스하기 전에 보류중인 변경 사항 중 일부를 숨겨야했습니다. 업데이트 된 " gitk --all"은 (는) 더 이상 첫 번째 숨김을 표시하지 않습니다. 나는 그것이 망가질 것이라고 생각했다. 두 번째 지점에서 작업을 마치고 나서 그 보관함을 뜯어 냈습니다. 그 후 업데이트 된 " gitk --all"이 (가) 원래의 은닉처를 다시 표시했습니다.
Daniel Miladinov 2013

17

브랜치에서 실행되는 "숨김"을 원한다면 현재 브랜치의 새 브랜치에 변경 사항을 저장하기 위해 이와 같은 작업을 수행하십시오.

git checkout -b new_stash
git commit -a -m "stashed changes"

은닉을 취소하려면

git reset HEAD^
git branch -d new_stash

git stash는 변경 사항을 더티 트리로 가져올 수 있기 때문에 특히 유용합니다. 즉, 뛰어난 편집 내용이 있고

git pull

그리고 당신은 할 수 없습니다, 당신은 당신의 변경 사항을 숨기고, 숨긴 다음 적용 할 수 있습니다

git stash
git pull
git stash apply
git stash clear

이것이 도움이 되었기를 바랍니다!


예를 들어 숨기려는 항목이 make해당 브랜치 에서 실행 된 결과로 생성 된 바이너리 인 경우에는 어떻게됩니까? (분기 별 숨김은 다음에 해당 분기에서 증분 빌드를 수행 할 때 시간을 절약 할 수 있지만 확실히 바이너리를 인덱스에 추가하고 싶지 않습니다.)
Clément

5

git-stash는 아직 체크되지 않은 변경 사항을 현재 체크 아웃 된 브랜치가 아닌 다른 브랜치로 옮기는 데 가장 유용합니다.

예를 들어-나는 종종 버그 수정 브랜치에서 간단한 변경을하고 있음을 발견합니다. 제가 작업중인 변경 사항이 처음에 예상했던 것보다 더 복잡하다는 것을 알게되었습니다. Git-stash는 변경 사항 집합을 다른 분기로 이동하는 가장 쉬운 방법입니다.

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