티스토리 뷰
커밋하지 않은 변경 내용이나 새롭게 추가된 파일들이 작업 트리에 남아있는 채로 다른 브랜치로 전환(checkout)하면, 그 변경 내용은 기존 브랜치가 아닌 전환된 브랜치로 옮겨가게 됩니다.
만약 코드를 열심히 수정하다가 갑자기 핫픽스 요청이 들어오는 경우 완성되지 않은 내용을 커밋하기에는 찝찝하고, 변경사항 전체를 하드 리셋하거나, 새로운 저장소를 만들어서 작업하는 등 명쾌한 해답은 없었습니다.
git add .
git commit -m "Hotfix 작업을 위한 임시 저장(작업중)"
이런 상황에서 git stash 명령어로 변경사항을 임시 저장했다가, 나중에 다시 이어서 작업할 수 있습니다.
user@AL01724100 Git-Study % ls
aa bb cc
aa, bb, cc 파일이 있을 때 cc 파일을 작업하던 중 다른 파일을 작업하는 경우를 예로 들겠습니다.
user@AL01724100 Git-Study % git stash
Saved working directory and index state WIP on cc: 5c7d508 stash cc pop
user@AL01724100 Git-Study % git status
현재 브랜치 cc
커밋할 사항 없음, 작업 폴더 깨끗함
stash 명령어를 실행하면 작업했던 내용이 초기 상태로 변한 것을 확인할 수 있습니다. 또한 status로 확인해도 변경 사항이 없는 것을 확인할 수 있습니다. 이제 급한 작업을 처리하면 됩니다.
user@AL01724100 Git-Study % git stash pop
현재 브랜치 cc
커밋하도록 정하지 않은 변경 사항:
(무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
(use "git restore <file>..." to discard changes in working directory)
수정함: cc
커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
사용하십시오)
Dropped refs/stash@{0} (88dcd639101f4f957800115c4d3219eb3aa0553d)
이후 기존의 작업을 다시 진행하기 위해 stash pop 명령어를 실행합니다. 기존의 작업했던 내용을 확인할 수 있으며 작업을 이어서 진행하면 됩니다!!
user@AL01724100 Git-Study % git stash -m "c"
Saved working directory and index state On cc: c
user@AL01724100 Git-Study % git stash -m "z"
Saved working directory and index state On cc: z
user@AL01724100 Git-Study % git stash list
stash@{0}: On cc: z
stash@{1}: On cc: c
stash도 commit처럼 메시지를 설정할 수 있습니다. -m을 통해 메시지를 설정할 수 있으며, stash list 명령어를 통해 stash 목록을 확인할 수 있습니다.
user@AL01724100 Git-Study % git stash show 0
cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
user@AL01724100 Git-Study % git stash show 1
cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
또한 git stash show + index를 통해 stash에서 변경된 내용을 diff처럼 자세히 볼 수 있습니다.
user@AL01724100 Git-Study % git stash apply 1
현재 브랜치 cc
커밋하도록 정하지 않은 변경 사항:
(무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
(use "git restore <file>..." to discard changes in working directory)
수정함: cc
커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
사용하십시오)
user@AL01724100 Git-Study % git stash list
stash@{0}: On cc: z
stash@{1}: On cc: c
user@AL01724100 Git-Study % git stash drop 1
Dropped refs/stash@{1} (f4a08026c2ece045bbc7a914d04d93d48f029e5f)
git stash apply + index를 통해서 해당 stash에 저장된 내용으로 복구할 수 있습니다. stash pop과 다른 점은 명령어 실행 후 stash를 삭제 하는지 하지 않는지 입니다. stash를 삭제하는 명령어는 stash drop을 통해 삭제할 수 있습니다. 즉, stash pop은 apply + drop을 합친 것과 같으며 stash는 스택 구조로 관리됩니다.
'Git' 카테고리의 다른 글
| Git Cherry-Pick - 커밋 내용 합치기 (0) | 2022.02.09 |
|---|---|
| Git Commit - 커밋과 커밋 내용 수정 (0) | 2022.02.08 |
| Git Rebase - 커밋 히스토리를 깔금하게 (0) | 2022.02.08 |
- Total
- Today
- Yesterday
- 연산자
- DSL
- ViewModelProvider
- 클린 코드
- ConcatAdapter
- observable
- DART
- clean code
- TDD
- rxjava
- Android
- CancellationException
- git
- ViewModelStoreOwner
- gradle
- Flowable
- commit
- Flutter
- 함수
- viewmodel
- null
- Widget
- ConcatAdapter.Config
- 보이스카우트 규칙
- Exception
- 코루틴
- Kotlin
- isActive
- Coroutine
- 클린코드
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
