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 listgit 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 -Ralias 를 이용하여 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 |