Git Stash - 임시 보관하기
Git Stash
$ git stash
는 워킹 디렉토리에 Unstaged - git add 는 수행됨
파일들을 백업하고 워킹디렉토리를 HEAD - 이전 커밋
상태로 만드는 명령이다.
- 수정중인 상태를 임시 저장해두고 이전 커밋으로 되돌리기 (커밋을 하거나 브랜치를 만들어서 보관할수 있으나 현재 수정중인 상태라서 따로 커밋 브랜치가 애매한상황)
- 현재 브랜치에 작업한 사항을 다른 브랜치로 옮기거나
$ git stash
- 현재 수정중인 상태에서 이전 HEAD 의 커밋 상태로 돌아감
$ git stash pop
- Stash로 임시 저장했던 상태로 되돌린다. 저장된 스택중에 가장 위에 있는것 최신에 Push 된 상태로 돌아간다.
$ git stash list
- 현재 stash(임시 보관)되어진 리스트를 보여줌
$ git stash save NAME
- 해당 이름으로 git stash 를 수행 (구별하기 위한 메세지를 지정해주는것 이다.)
$ git stash apply stash@{0}
- Stash 이름들은 기본적으로 stash@{0} stash@{1} stash@{2} 이런식으로 지정된다. 해당 이름으로 상태를 돌릴수있다.
$ git stash drop stash@{0}
- 저장된 Stash중 해당 이름으로 되어 있는 것을 삭제한다. 생략하면 맨위에 Push 된것을 삭제한다.
$ git stash clear
- 모든 Stash 리스트 들을 삭제한다.
Git Stash Merge
Git Stash 가 무조건 임시 보관 상태로 돌리는것이 아니고 해당 파일을 수정후에 Stash 하기 전 상태와 머지를 수행한다. Stash 하기전 상태와 Stash한 후에 파일이 Conflict 가 나는 경우가 있을수 있다.
1
2
3
4
error: Your local changes to the following files would be overwritten by merge:
file1
Please, commit your changes or stash them before you can merge.
Aborting
git stash
를 수행한후에 파일을 수정한다음 git stash pop
으로 돌아가려고 할때 Conflict 이 발생한다면 git commit
을 수행한후에
git stash pop
을 수행한다. 그러면 Conflict 가 발생하고 해당 사항들을 모두 Merge 해주어야 한다.
Git Stash 브랜치 바꾸기
가끔 잘못된 브랜치에 작업을 하고 있을 경우가 있다. 작업한 브랜치에 내용을 내가 원하는 브랜치로 적용하고 싶을때 Git stash 를 사용할 수 있다.
- 현재 브랜치에서 작업 된 사항을 모두
git add .
를 수행해 Unstaged 상태로 만들어 준다.git checkout name
내가 원하는 브랜치로 이동한다.git stash pop
stash로 저장한 상태로 돌려준다.git commit
해당 브랜치에 커밋해준다.git checkout master
git checkout -- .
추가적으로 master 브랜치의 수정사항을 모두 원상태로 돌려준다. git reset --hard HEAD~1
을 수행해
주어도 된다. –hard 옵션을 줄경우 모든 수정 내용이 사라질수 있으니 조심해야 한다.