웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > git

git stash 명령어, 임시 저장하기

Last Modified : 2023-11-07 / Created : 2022-05-17
3,147
View Count
git을 사용하여 특정 파일을 변경한 경우 untracked 상태로 변경됩니다. 이를 staged로 변경하여 커밋하거나 푸시하여 서버에 반영할 수 있겠죠. 하지만?

"만약 현재 변경한 사항을 임시로 저장하고 나중에 사용하고 싶다면?"


현재 진행하고 있는 task보다 더 중요한 일... 먼저 처리해야 할 task가 있다고 생각해봅니다. 아니면 브랜치를 변경해야 할 상황이 있을 수 있습니다. 변경된 파일을 커밋하게되면 더 먼저 처리해야 할 작업이 나중에 commit 될 것이기 때문에 다른 방법이 없을까 고민하게 되겠죠. 이 경우 사용할 수 있는 git 명령어가 바로 stash입니다.



# git stash 명령어 알아보기


git에서 자주 사용되는 명령어는 아니지만 stash는 알아두면 매우 유용한 기능입니다. 먼저 stash가 하는 일은 다음과 같습니다.

현재 작업 경로에서 변경된 부분을 임시로 저장


예를들어 현재 작업 내용을 다른 곳에 메모해두는 것과 비교할 수 있습니다. 다음에 다시 확인할 수도 있고 메모를 지우거나 여러 개의 메모를 저장할 수도 있겠죠.

@ stash와 commit의 차이점은?
그렇다면 commit과의 차지점은 무엇일까요? 일단 작업을 커밋할 경우 시간순으로 커밋이 반영되기 때문에 원하지 않는 이 전에 커밋된 내용이 반영될 수 있습니다. 이를 피하기 위해서 임시로 다른 브랜치를 생성할 수도 있지만 번거롭죠.

stash는 변경 된 내용을 여러 개 저장할 수 있고 원하는 내용만 선택해서 반영하거나 삭제하는 것이 가능하다는 장점이 있습니다. 꼭 필요한 부분만 선택하여 추가 작업을 하거나 삭제하는 일이 간단하겠죠. 그럼 아래에서 어떻게 stash를 사용하는 지 알아봅니다.


! stash 사용한 방법 및 예제


일단 git stash에서 자주 사용되는 명령어 위주로 알아봅니다. 가장 먼저 stash를 사용하기 위해서 가장 먼저 사용하는 명령어입니다.

1. git stash 또는 git stash save
현재 변경된 내용을 stack에 저장하는 명령어입니다. 위 명령어를 누르면 새로운 stash가 저장된 것을 알 수 있습니다.
> git stash

Saved working directory and index state WIP on develop: 83ca3x73 Updated refPages

위 명령어를 사용할 경우 변경된 내요은 stash에 저장되면서 untracked에는 사라지게 됩니다. 즉 파일에 변경된 부분이 제외되니 다시 불러올 경우 아래의 apply 명령어를 사용해야 합니다.

2. git stash list
다음으로 저장된 stack을 보여주는 명령어 list입니다. 여러 개의 stash가 저장될 수 있으므로 list를 통해 현재 저장된 모든 stack 리스트를 확인 할 수 있습니다. 만약 3개의 stack이 존재하는 경우 아래와 같이 출력됩니다.
> git stash list

stash@{0}: WIP on develop: 83ca3x73 Updated refPages
stash@{1}: WIP on develop: 83ca3x73 Updated refPages
stash@{2}: WIP on develop: 83ca3x73 Updated refPages

3. git stash apply 또는 git stash apply {stashName}
저장된 stack을 반영하는 방법입니다. 가장 마지막 stash를 반영하거나 아니면 특정 stash만 선택하여 반영할 수 있습니다.
> git stash apply
> git stash apply stash@{0}

4. git stash drop 또는 git stash drop {stashName}
생성된 stash를 저장할 수 있으며 반대로 삭제할 수도 있습니다. 삭제를 위해 drop 명령어를 사용합니다.
git stash drop
> git stash drop
// 가장 최근의 stack을 삭제

> git stash drop stash@{1}
// stash@{1}을 선택하여 삭제

5. git stash clear
stash 목록을 모두 비우는 명령어입니다. 모두 사라지기 때문에 신중하게 사용해야 하겠습니다.
> git stash clear

6. git stash show -p
마지막으로 변경된 내용을 보여줍니다. 만약 특정 stash를 보려면 아래와 같이 -p 플래그 뒤에 원하는 stash값을 추가합니다.
> git stash show -p stash@{0}

변경된 사항을 보여주게 됩니다. git diff와 비슷하게 동작합니다.


! git stash apply로 적용된 내용을 취소하는 방법

만약 apply한 내용이 잘못되었거나 불필요한 경우 되돌리는 방법입니다.
> git stash show -p | git apply --reverse

또는

> git checkout -f


여기까지 git stash에 대하여 알아보았습니다. 이제 변경된 내용을 기록하기 위해 메모장을 사용하여 붙여넣는 등의 불필요한 방법은 더 이상 하지 않으셔도 되겠네요!

Previous

[Git] git clone 동작 안하는 경우 fatal error