Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

aeFactory

[Git] git stash - 깃 작업 내용을 임시 저장하는 법 본문

Git

[Git] git stash - 깃 작업 내용을 임시 저장하는 법

은하비 2023. 5. 16. 00:00

1. stash란?
2. git stash 명령어
3. git stash save와 push

Stash란?

git shash는 현재 하고 있던 작업을 커밋하지 않고 임시 저장할 수 있는 기능입니다. 현재 하고있는 작업보다 우선 순위가 높은 작업이 생기는 경우에 사용할 수 있습니다. 이 경우 stash를 사용하지 않으면 현재 작업 중인 내용을 reset 하거나 작업 내용을 남기고 싶다면 commit하는 방법을 생각해 볼 수 있는데, 작업 내용이 많은 경우 reset은 사용할 수 없고 commit은 공용 브랜치의 경우 미완성의 코드를 commit해서는 안되고 개인 branch인 경우에도 좋은 흐름은 아닙니다. 이 때 git stash를 사용하면 현재까지 작업한 내용을 안전하게 저장했다가 급한 일을 먼저 처리하고 다시 기존 작업 내용을 꺼내 작업할 수 있습니다. 

git stash 명령어

명령어 기능 비고
$git stash 현재 작업 내용을 stash 스택에 저장 $git stash save에서 save 생략
$git stash list stash 스택의 내용을 리스트로 확인  
$git stash pop stash 스택에서 pop 인수로 stash@{n}를 가질 수 있음
$git stash drop stash 스택에서 삭제 인수로 stash@{n}를 가질 수 있음
$git stash clear stash 스택을 모두 삭제  
$git stash apply stash 스택의 내용을 현재 소스에 적용 인수로 stash@{n}를 가질 수 있음

1. $git stash (save)

현재 tracked 상태인 파일작업 내용을 stash 스택에 저장하는 명령어로 save를 생략하고 사용할 수 있다. git이 관리하고 있는 tracked 상태인 파일만 stash에 담기기 때문에 untracked 파일까지 stash에 담고 싶다면 $git stash -u를 사용해야한다.

옵션 기능
$git stash -u untracked 상태인 파일도 stash
$git stash -m stash 메시지를 입력

2. $git stash list

stash 스택에 담긴 내용을 확인할 수 있다. stash@{n} 형식으로 써져있는 인수를 타겟을 지정할 수 있는 명령어와 함께 사용할 수 있다.

Figure 1. $git stash list 결과

3. $git stash pop

stash 스택의 최상단 stash@{0}을 꺼내 적용한 후 해당 stash는 삭제한다. parameter로 stash@{n}를 주면 n 번째 stash를 적용한 후 이를 삭제한다.

4. $git stash drop

stash 스택의 최상단 stash@{0}를 삭제한다. parameter로 stash@{n}를 주면 n 번째 stash를 삭제한다.

5. $git stash clear

stash 스택 전체를 삭제한다.

6. $git stash apply

stash 스택의 최상단 stash@{0}을 꺼내 적용한다. 해당 stash는 삭제하지 않는다. parameter로 stash@{n}를 주면 n 번째 stash를 적용한다.

3. $git stash save$git stash push

Git documentation의 stashing에 관한 문서를 보면 $git stash save$git stash push에 관한 논의가 언급되어있다.

요약하자면 $git stash save 명령어를 $git stash push 명령어로 대체하자 라는 움직임인데, 이는 push는 가능한 pathspec을 save는 지원하지 않는 것에 기인했다고 합니다. pathspec은 깃 명령어에 대한 경로를 지정하는 방식입니다. 즉 push는 pathspec을 지원하고 save는 지원하지 않는다는 것이 의미하는 바는 push는 특정 경로(파일)에 대한 stashing이 가능하다는 의미입니다. 따라서 특정 파일만 임시 저장하고 싶으면 $git stash push <pathspec>을 사용하면 됩니다.