Git Shelve vs Stash


275

나는 shelveGit 의 측면에 매우 익숙하지 않다 . stash미완성 된 작업을 제쳐 놓는 데 사용 된다면 무엇 shelve입니까? 무엇을 위해 사용 하시겠습니까?

예를 들어 프로젝트 업데이트 (VCS 메뉴)

여기에 이미지 설명을 입력하십시오

하나는 얻을 것이다 (Idea 2019.2)

여기에 이미지 설명을 입력하십시오


14
shelvegit 명령이 아닙니다. 이 질문의 맥락은 무엇입니까? shelve다른 도구에는 있지만 git의 일부는 아닙니다.
요나

2
Git stash는 shelvebzr, hg 등과 비슷합니다 . git 상호 운용성 패키지를 언급하고 있습니까?
drRobertz

3
허용 대답 아마 확인한다보다 더 upvotes이 (너무 IDEA에서) 너무 내 의심했다,이 질문은 유효하며 기간 ''선반은 "똑같이 자식 명령으로 오해 감사를 요청하십시오..
PravyNandas

답변:


266

git shelve Git에는 존재하지 않습니다.

git stash:

  • 작업 디렉토리 및 색인의 현재 상태를 기록하지만 깨끗한 작업 디렉토리로 돌아가고 싶을 때.
  • 로컬 수정 사항을 저장하고 HEAD 커밋과 일치하도록 작업 디렉토리를 되돌립니다.

브랜치에서 수정 사항을 격리하기 위해 2008 년 오래된 프로젝트 git shelve 가 있었지만 오늘날에는 그다지 유용하지 않습니다.

Intellij IDEA 쉘프 대화 상자에 설명 된대로 " 쉘프 및 언 쉘빙 "기능 은 VCS (버전 제어 시스템 도구)에 연결되지 않고 IDE 자체에 연결되어 있으며 아직 변경 목록에 커밋하지 않은 보류중인 변경 사항을 임시로 저장합니다.

참고 힘내 2.13 (Q2 2017) 이후, 지금 너무 개별 파일을 숨길 수 있습니다 .


73
나는 그 개념을 오해했다. 실제로 IntelliJ IDEA의 타사 제품 일 때 Git 명령이라고 생각했습니다. 나는 그것을 위해 git 문서를 찾을 수 없었기 때문에 내가 뭔가 빠졌다고 생각했다. jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez

2
문서 링크는 "선반"이 IntelliJ IDE에 의해서만 관리되는 변경 (패치) 세트임을 나타내며, Git이 관리하는 표준 항목 인 "스 태쉬"를 링크 해제합니다. 선반을 피하십시오.
barbara.post

2
@ jerry chin shelve는 귀하의 경우 숨김보다 낫습니다. 선반이 자식에 있었으면 좋겠다. Webstorm은 RAM을 빨아들입니다. 그것은 자식이 있던 경우에 우리는 cmd를 라인에서 실행할 수있는 유용한 것
digender 마하라

2
선반에 문제가있는 동료 / 회사 관행을 다루지 않는 일반적인 유스 케이스가 있습니다. 완전한 쓰레기가 당신의 저장소에 추가 될 수 있고 누군가의 광기로 인해 그것을 고치도록 정돈되지 않을 수 있습니다. 대안은 비슷 git stash && <your actual command> && git stash pop하지만 짜증납니다. 자동 선반 및 적용은 필요한 것에 더 가깝습니다.
smaudet

1
@VonC 유사하지 않음-사용중인 프로젝트에 '표준이 아니기 때문에 커밋 할 수없는 설정이있는 유스 케이스가 있습니다. 그리고 로컬 개발 대 dev / test / prod를 위해 빌드 파일을 수정 해야하는 것과 같은 것들을 포함하여 사용 된 다른 십여 개의 유스 케이스가 있습니다.
smaudet

187

Git과 함께 JetBrains IDE를 사용하는 경우 "선반 및 비 선반 작업 외에도 스 태싱 및 언스 트래 싱 작업이 지원됩니다. 이러한 기능은 공통점이 많으며, 주요 차이점은 패치 생성 및 적용 방식에 있습니다. 선반은 개별 파일 또는 묶음으로 작동 할 수 있습니다" Stash는 한 번에 변경된 전체 파일로만 작동 할 수 있습니다. 차이점에 대한 자세한 내용 은 다음과 같습니다 . "


10
것으로 보인다 선반이 보다 유연 자식 숨긴 .
Dmitry Davydov

12
@DmitryDavydov git stash -p둘 다를 능가하는 것이 있습니다 . 불행히도 커맨드 라인에서만.
Vee

1
@TheVee 예, 정보면에서 기능면에서 선반과 매우 유사합니다.
Dmitry Davydov

10
실제로, Git 2.13 (2017 년 2 분기) 이후로 개별 파일을 숨길 수 있습니다 ... 자세히 알아보기
kyb

5
예를 들어 문서를 자동 생성 할 때마다 적용 할 변경 패치가있을 때 쉘프가 매우 유용하다는 것을 알았습니다 . Shelve는 .idea / shelve 내에 파일을 생성하고 VCS에 파일을 추가하고 모든 팀과 공유 하여 변경 사항을 적용하고 동일한 작업을 실행할 수 있습니다.
ingkevin

63

이전 답변 외에도 중요한 점이 있습니다.

shelveJetBrains의 제품 기능 (예이며 WebStorm, PhpStorm, PyCharm, 등). 선반 파일을 .idea/shelf디렉토리에 넣습니다 .

stashgit옵션 중 하나입니다 . 숨김 파일을 .git디렉토리에 넣습니다 .


2
이 중요한 질문을 명확히 해 주셔서 감사합니다.
AmerllicA

4

다른 곳에서 변경 사항을 공유하지 않는 경우 변경 사항을 숨기지 않고 보류하는 것을 선호합니다.

스 태싱은 git 기능이며 특정 파일을 선택하거나 파일 내부의 변경 사항을 선택할 수있는 옵션을 제공하지 않습니다. 선반은 그렇게 할 수 있지만 이것은 git 기능이 아닌 IDE 관련 기능입니다.

여기에 이미지 설명을 입력하십시오

당신이 볼 수 있듯이 내 선반에 포함 할 파일 / 라인을 지정하도록 선택할 수 있습니다. 숨김으로 할 수는 없습니다.

IDE에서 선반을 사용하면 패치 변경 사항이 .git 폴더에 저장되지 않으므로 패치의 이식성이 제한 될 수 있습니다.

유용한 링크 :

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