git stash 명령어 정리


  • git stash 명령어에 대해서 공부하고 정리한 글입니다

stash

  • git stash 명령어는 워킹 디렉토리에서 작업을 하던 도중 변경 사항을 잠시 다른 곳에 저장하지만 커밋은 만들지 않을 때 사용한다

  • 특정 브랜치에서 개발 도중 다른 브랜치로 이동을 하려는데 현재 브랜치에 아직 커밋하지 않은 변경사항이 있지만 아직 이 파일들이 커밋을 하기에는 애매할 때 변경사항을 잠시 저장하는 용도로 사용할 수 있다

  • 또는 버그를 수정하는 과정에서 각각 다른 시도를 따로 저장하고 싶은 경우에도 사용할 수 있다

  • stash 명령어를 사용하면 stash stack에 관련된 아이템을 추가할 수 있는데 stack 자료구조처럼 가장 최근에 추가된 아이템을 가장 먼저 꺼낼 수 있다

  • stash는 tracked(추적중 - 한번이라도 Git에 올렸던 상태)인 파일들만 들어간다

  • 새로 만든 파일들은 untracked 상태니까 들어가지 않는다

$ echo add >> newfile.txt
# 기존 파일에 새로운 변경사항 추가되었지만 다른 작업해야 하는 경우
# add 라는 문자열일 newfile.txt에 추가

$ git stash
# 아무런 옵션도 추가하지 않으면 git stash push 명령어와 동일
# 아무런 타이틀 없이 저장된다

$ git stash push -m "first stash"
# 메시지 추가하고 싶은 경우 -m 메시지 옵션을 사용한다
# stash 명령어를 사용하면, 내가 작업하고 있는 모든 것이 stash에 저장되기 때문에
# working directory와 staging area가 깔끔해진 것을 확인할 수 있다

$ echo add >> newfile2.txt
# 다시 또 다른 파일 수정

$ git add2 newfile.txt
# staging area에 추가
# add 라는 문자열을 newfile.txt에 추가

$ git status
#  modified: newfile.txt 확인

$ git stash push -m "second stash" --keep-index
# 내가 작업한 것들을 staging area에 있는 것을 유지하면서 stash에 저장하고 싶은 경우

$ git status
# second stash 라는 이름으로 stash에 해당 내용이 저장된 것과 
# modified: newfile.txt 확인할 수 있다

$ echo new > new.txt
# new.txt라는 새로운 파일 추가

$ git status
# 새로 추가된 new.txt라는 파일은 아직 tracking 되지 않은 상태

$ git stash
# 새로 추가된 untracking 상태의 파일은 stash에 저장이 되지 않는다

$ git stash -u
# untracking 옵션 -u 사용하면 untracking 상태의 파일도 stash에 추가할 수 있다

$ git stash list
# 전체적인 stash 내용 확인
stash@{0}: WIP on master: 3345766 feature a
stash@{1}: On master: second area
stash@{2}: On master: first try
# @뒤의 숫자는 id 같은 것
# stack처럼 처음 추가된 ㄱ 가장 아래에 있는 것을 확인할 수 있다

$ git stash show stash@{2}
# stash@{2}의 어떤 내용이 수정되었는지 확인

$ git stash show stash@{2} -p
# 조금 더 자세한 내용 확인하고 싶은 경우 p 옵션을 사용한다

$ git stash apply
# apply 명렁어 뒤에 아무것도 작성하지 않으면 stack에서 가장 위에 있는 item 내 브랜치에 적용되면서
# stash는 그대로 유지된다

$ git stash apply stash@{2}
# 특정한 stash 적용하고 싶다면 id 지정
# 작업하고 있던 파일들이 나의 워킹디렉토리나 index에 온 것을 확인할 수 있다

$ git stash list
# 모든 list 그대로 있다
# 즉, apply 명령어를 사용하면 가장 위에 있는 commit이 브랜치에 적용되지만 stash list에서 삭제되지는 않는다

$ git stash pop
# 제일 위에 있는 item이 워킹 디렉토리로 옮겨져 나오면서 적용된다
# 동시에 stash list에서는 삭제된다

$ git stash drop stash@{2}
# 특정 stash item 삭제

$ git stash clear
# stash 모든 item 삭제

$ git stash branch "새로운 브랜치 이름"
# 가장 최근에 stash 된 item을 내 브랜치에 적용하는 것이 아니라
# 새로운 브랜치를 만들고 싶은 경우
# 새로운 브랜치가 만들어지면서 파일의 내용들이 적용된다

Reference









© 2020. by dkmqflx

Powered by dkmqflx