티스토리 뷰

Programming/Command Line

git stash에 대해서

junojuno 2023. 3. 10. 19:08

git stash는 커밋 되지 않은 작업들과 파일들을 local stash에 저장하고 브랜치에서 수행한 마지막 commit으로 돌아가는 것이다. 

이렇게 stashing을 통해서, 다른 곳으로 주의를 돌리고, 끝내지 않은 코드를 나중에 다시 진행할 수 있다.

개발자가 특정 파일을 stashing 하는 것은 작업해야 하는 파일과 커밋 준비된 파일을 구분하고 선택할 수 있도록 하기 때문에 유용하다. 

 

1. stash 사용하기

git stash 명령어는 현재 working directory에 있는 모든 tracked file들을 stash 한다.

git stash

2. 특정 파일을 stash 하는 방법

특정 파일을 stash하는 방법은 추가적인 push option과 함께 파일 명(경로) 가 필요하다.

git stash push [file]

3. stash를 적용하기

(1) pop

git stash pop

(2) apply

git stash apply

git stash apply <stash_name>
// stash_name e.g) stash@{0}

그러면 git stash popgit stash apply의 차이점은 무엇일까?

git stash pop은 default로 가장 위에 있는 stash를 적용하고 없앤다.

반면, git stash apply는 stash list에 나중 재사용 가능성을 위해서 남긴다. (git stash drop 할 수 있다.)

 

git stash pop을 통해 충돌이 일어나지 않는한 위와 같이 작동한다. (충돌 발생시 apply와 같이 stash를 삭제하지 않는다.)

<요약>

git stash pop == git stash apply && git stash drop

 

(3) Staged 상태까지 저장 하는 방법

git stash apply --index

출처 : https://gmlwjd9405.github.io/2018/05/18/git-stash.html

 

4. stash에 특정 이름 주기 & stash 목록 확인하기

git stash -m "message"

이렇게 메세지를 주면

git stash list

위 명령어를 통해서 stash를 확인했을때 다음과 같은 차이가 있다.

message를 주었을 때
message를 주지 않았을 때.

위와 같이 메세지를 주지 않으면, 이전 커밋 메세지를 불러오는 것을 확인 할 수 있었다.

 

5. stash를 stack에서 제거하기

apply 옵션은 stash를 적용하고, pop과 달리 stack에 여전히 남아있다.

스택에 남아 있는 stash는 위의 아래 명령어를 통해 제거할 수 있다.

// 가장 최근의 stash를 제거한다.
git stash drop
// stash 이름에 해당하는 stash를 제거한다.
git stash drop <stash_name>

6. stash 되돌리기

git stash show -p | git apply -R

7. 모든 stash 삭제

git stash clear

8. git stash --patch를 통한 stash 저장할 것 / 저장하지 않을 것 구분

git stash --patch(-p)를 통해서 stash에 저장할 것과 저장하지 않을 것을 구분 할  수 있다.

출처 : https://phoenixnap.com/kb/git-stash-specific-files

각 변화된 것들에 대해서 prompt 창이 나와 선택을 할 수 있다.

stash 할지 안할지에 대해서. 옵션은 위 표를 참고 하자.

아래는 내가 시행한 예시다.

 

<그럼 stash를 언제 유용하게 사용할 수 있을까?>

현재 작업하다가 pull을 했는데 변경사항이 생겨서 pull이 안될때 같이 충돌을 피하기 위해서 사용 하거나,

아래와 같이 진행하다가 현재 최종 커밋 버전에 있어서 뭘 빼먹었다?? -> 되돌리기 가능

# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something

# stash away the current mess I made
git stash save

# some changes in the working dir

# and now add them to the last commit:
git add -u
git commit --amend

# back to work!
git stash pop

더 많은 use case는 아래를 참고하자.

https://stackoverflow.com/questions/20537223/what-is-the-intended-use-case-for-git-stash

 

What is the intended use-case for git stash?

If I work on branch A and suddenly need to work on branch B before being ready with a commit on branch A, I stash my changes on A, checkout B, do my work there, then checkout A and apply the stash....

stackoverflow.com

 

[Reference]

https://godtaehee.tistory.com/29

https://stackoverflow.com/questions/20537223/what-is-the-intended-use-case-for-git-stash

https://phoenixnap.com/kb/git-stash-specific-files

https://gmlwjd9405.github.io/2018/05/18/git-stash.html

 
 
 
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday