IntelliJ의 Shelve기능 사용해 보기 (Shelve vs stash)

HMS·2024년 1월 14일

프로젝트 작업중 이전 분기의 작업물에 대한 기능 확인 때문에 다른 브랜치에 체크아웃 해야하는 상황이 생겼다. 작업물을 커밋 하고 움직이기에는 아직 commit단위를 채우지 못했기 때문에 임시 저장 후 작업을 하게되었다.

그럴때 다른 브랜치에 checkout을 시도하면 commit 혹은 stash를 먼저 하라는 문구를 확인할 수 있다.

IntelliJ에서는 stash와 비슷한 기능인 Shelve라는 기능을 제공하는데 해당 기능을 사용해 보기로 했다.

먼저 Shelve와 Stash의 차이를 알아보면

IntelliJ Shelve

Shelve는 IntelliJ에서 제공하는 변경사항을 임시로 저장하는 기능이며 git의 기능이 아니다.

  1. IntelliJ에 특화된 기능으로 Git등의 다른 버전관리 시스템에는 존재하지 않는기능이다.
  2. 변경 사항 보관: 작업 중인 변경 사항을 Shelve에 저장할 수 있다. 코드를 커밋하지 않고 임시로 보관하고 싶을 때 유용하다
  3. 파일 단위저장: 파일을 단위로 변경사항을 저장한다. 특정 클래스 파일만 지정하여 보관할수 있음을 의미하며 변경된 전체 작업을 저장하는 stash와 가장 큰 차이점이라 생각한다.
  4. 프로젝트 간 공유 불가: 변경 사항은 현재 프로젝트에만 국한되면 다른 프로젝트나 IntelliJ 인스턴스에서는 접근할 수 없다.

Stash

  1. Git에 통합된 기능으로 IntelliJ 뿐만아니라 다른 IDEA나 Git 호환 도구에서도 사용할 수 있다.
  2. 작업 디렉토리 정리: 작업 디렉토리에서 변경사항을 임시로 제거 하고, 나중에 다시 적용하거나 삭제(drop)할 수 있다.
  3. 디렉토리 단위 저장: 변경된 전체 디렉토리를 저장한다.
  4. 다중 프로젝트/환경지원: Git저장소에 종속되므로 다른 프로젝트나 환경에서도 동일한 저장소에 접근할 수 있다.

Shelve 사용해보기

  1. 변경사항이 있는 채로 다른 브랜치로의 checkout을 시도하면 다음과같은 경고창이 발생한다.
  2. commit-> Shelf에 넣을 변경사항 선택 -> 우클릭 한 후 shelve changes 를 누르면 shelf에 저장된다.
  3. 커밋창 우측의 Shelf를 선택하면 저장된 이전 작업내용들을 확인 할 수 있다.
  4. 원래 하던작업을 불러오려 한다면 Shelf -> Unshelve를 통해 불러올 수 있다.

이전 작업들을 Shelf에서 Unshelve를 통해 불러왔더라도 Shelf에 저장된 내역들은 자동으로 지워지지 않는다.

마무리

둘 다 코드 변경 사항을 임시로 저장하는데 사용되지만, Shelve는 IntelliJ 전용이며 Stash는 Git에 통합된 기능이다.
Stash는 Git에 통합된 기능으로 더 큰 범위의 코드 변경 사항을 관리하는 데 적합하며 다른 Git 환경이나 프로젝트에서도 접근할 수 있는 이점이 있다.
반면, Shelve는 파일단위 Stash는 디렉토리 단위로 저장하게 되는데 Shelve가 즉각적이고 세부적인 작업에서는 좀 더 유연하게 적용 가능할 것 같다는 생각이 든다.

profile
안녕하세요

0개의 댓글