git stash
란?
진행중인 작업을 잠시 stash
라는 저장소에 저장해놓는 명령어이다.
사용 예시
이를테면, feature/order-cancel
이라는 브랜치를 만들어서 주문 취소 기능을 작업 하던 중 기존 주문 기능에서 에러가 났다고 했을 때, fix/order
로 브랜치를 옮기려면 지금까지 진행한 작업을 commit
해야 한다. 여기서 불완전한 커밋을 하지 않고 커밋 목록을 깔끔하게 관리하고 싶다면 stash
로 잠시 작업을 저장하고 브랜치를 옮겨갈 수 있다.
먼저 커밋하고 추후에
git squash
로 합쳐도 된다.
git squash 를 통해 잠시 저장할 수 있는 파일
modified && trakced
상태인 파일git
시스템을 통해 관리되는 파일 중 수정된 파일을 의미한다.
staged
상태인 파일git add
명령어를 통해 스테이징 상태로 올라간 파일을 의미한다.
명령어 사용 예시
git status
로 상태 확인
$ git status
On branch feature-user-mutable-apis-authorization
Your branch is up to date with 'origin/feature-user-mutable-apis-authorization'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: app/src/main/java/com/codesoom/assignment/controllers/ControllerErrorAdvice.java
no changes added to commit (use "git add" and/or "git commit -a")
app/src/main/java/com/codesoom/assignment/controllers/ControllerErrorAdvice.java
파일이 변경되었음을 알 수 있다. git 에서 tracking 중인 파일이지만, 아직 스테이지에 올라가진 않았다.
git stash
로 상태 저장
$ git stash
Saved working directory and index state WIP on feature-user-mutable-apis-authorization: 175b121 기존의 테스트 중 권한이 필요해진 부분을 통과할 수 있도록 수정
메세지를 확인해보면, 워킹 디렉토리를 저장했다는 것을 알 수 있다.
git stash list
로 저장된 stash
목록 확인하기
$ git stash list
stash@{0}: WIP on feature-user-mutable-apis-authorization: 175b121 기존의 테스트 중 권한이 필요해진 부분을 통과할 수 있도록 수정
stash
의 0
번에 저장되었다는 것을 확인할 수 있다. on ...
으로 작성된 부분은 현재의 브랜치 이름을 나타내고 있다.
git stash apply
로 stash
복구하기
$ git stash apply
On branch feature-user-mutable-apis-authorization
Your branch is up to date with 'origin/feature-user-mutable-apis-authorization'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: app/src/main/java/com/codesoom/assignment/controllers/ControllerErrorAdvice.java
no changes added to commit (use "git add" and/or "git commit -a")
git stash apply
명령어를 통해 가장 최근의 stash
를 복구할 수 있다. stash
를 복구해도 stash
기록은 지워지지 않고 여전히 남아있다.
$ git stash list
stash@{0}: WIP on feature-user-mutable-apis-authorization: 175b121 기존의 테스트 중 권한이 필요해진 부분을 통과할 수 있도록 수정
위는 git stash list
를 실행해본 결과인데, 여전히 남아있는 것을 확인할 수 있다.
git stash apply
를 이용해 stash
에 있는 기록을 적용해도 stash
에 있는 기록은 지워지지 않는다. 그러나 git stash pop
을 이용해서 stash
에 있는 기록을 적용하면, stash
에 있는 기록이 지워진다.
git stash pop
으로 stash
복구하고, stash
기록 지우기
$ git stash pop 0
On branch feature-user-mutable-apis-authorization
Your branch is up to date with 'origin/feature-user-mutable-apis-authorization'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: app/src/main/java/com/codesoom/assignment/controllers/ControllerErrorAdvice.java
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (52b37ad9c3b5077a9940e94f651bcddc206d89d9)
$ git stash list
git stash pop 0
이후에는 git stash list
의 결과로 아무런 문자열도 반환되지 않는 것을 확인할 수 있다.
git stash pop
으로 stash
에 저장되어 있는 소스코드를 꺼내면 stash
에서 지워진다.
git stash drop
으로 stash
기록 지우기
$ git stash drop 0
위와 같이 명령어를 입력하면, 0
번에 위치한 stash
가 지워지게 된다.
stash
를 잘못 가져왔을 때 되돌리기
$ git stash show -p | git apply -R
가장 최근의 stash
를 이용하여 패치를 만든 뒤에 그것을 거꾸로 적용한다.
$ git stash show -p [stash 번호] | git apply -R
alias
를 이용하여 stash
편리하게 되돌리기
$ git config --global alias.stash-unapply 'git stash show -p | git apply -R'
명령어가 꽤 헷갈리기 때문에 위와 같이 설정정보로 등록해놓으면 나중에 실수로 잘못 git stash apply
를 했을 때 편리하게 취소할 수 있다.
$ git stash-unapply
한번 등록해놓으면 위와 같이 계속 사용할 수 있다.
레퍼런스
'깃' 카테고리의 다른 글
git show 명령어란? (0) | 2023.06.10 |
---|---|
git diff 명령어란? (0) | 2023.06.10 |
Git Object (깃 오브젝트, 깃 객체) 란? (0) | 2023.06.10 |
git cat-file 명령어란? (0) | 2023.06.07 |
git switch 명령어란? (0) | 2022.05.28 |