일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android Interceptor
- 습관만들기
- Android 12 대응
- OkHttp Interceptor
- MVP Architecture
- 카카오 알고리즘
- 영어공부
- scope function
- Android 12
- Kotlin FCM
- Android ProgressBar
- 알고리즘 자바
- 안드로이드 fcm
- 영어독립365
- Android
- Android WebView
- 안드로이드
- Android Jetpack
- Android ViewPager2
- DataBinding
- 66챌린지
- Kotlin
- 프로그래머스 알고리즘
- Java
- android recyclerview
- Android DataBinding
- Android Navigation
- 안드로이드 카카오 로그인
- 안드로이드 갤러리 접근
- WebView
- Today
- Total
Developer Geek
[Git] git stash란 본문
Git Stash
stash 뜻은 '넣어 두다'이다.
깃 공식 문서에 따르면 Git Stash를 다음과 같이 말하고 있다.
Stash the changes in a dirty working directory awway
말 그대로 작업물의 수정 내용을 넣어둔다(커밋하지 않고)는 의미인 것 같다.
개요
깃 공식 문서에 따르면 git stash
에 대해사 다음과 같이 설명하고 있다.
Use
git stash
when you want to record the current state of the working directory and the index,
but want to go back to a clean working directory. The command saves your local modifications away and reverts the workig directory to match theHEAD
commit.
여기서는 git stash
를 어떤 상황에서 왜 써야하는지를 명시하고 있다.git statsh
를 사용할 때는 현재 작업하고 있는 부분을 기록하며 수정 전의 작업물로 돌아갈 때 사용하라고 이야기하고 있다.
사용 예시
1. Pulling into a dirty tree
내가 깃을 통해 협업을 진행한다고 가정해보자.
예를들어 내가 작업하고 있는 브랜치는 feature/login
이고 이 브랜치는 develop
에서 나오게 되었다.
작업하던 중 다른 팀원의 작업 내용이 develop
에 합쳐지게 되었고, 작업 내용이 내가 개발중인 로그인 부분에도 영향이 있는 것이다.
만약 내가 작업한 부분이 develop
에서 변경된 작업과 충돌될 부분이 없다면 간단하게 git pull
을 수행하면 된다.
하지만 내가 작업한 부분이 develop
에서의 변경된 작업과 충돌되는 부분이 있다면 git pull
을 한다고 해도 conflict가 발생하고 쉽게 병합되지 않을 것이다.
이런 경우에 stash를 이용하여 아래와 같이 수행하면 쉽게 해결할 수 있다.
$ git pull
...
file foobar not up to date, cannot merge.
$ git stash -m "my stash message..."
$ git pull
$ git stash pop
위의 흐름을 가볍게 살펴보자.
git pull
하는 과정에서 병합 실패!git stash
를 통해서develop
과 충돌이 발생할 수 있는 부분을 임시 저장. (-m "..."
: 스태시 메시지는 옵션)git pull
를 통해 다시 최신 버전의develop
과 병합- 병합 성공한 후, 임시 저장되어 있는 기존 작업내용
git stash pop
을 통해 가져오기.
2. Interrupted workflow
이 경우는 내가 회사에서 일하면서 가장 많이 겪은 경우이다.
만약 내가 맡은 작업을 진행하던 중, 핫 픽스 이슈가 들어오거나 QA 검수 중 이슈 또는 앱 심사와 같은 급히 처리해야할 일들이 발생한다면 작업중인 내용은 우선순위가 밀리게된다. 그냥 커밋 후, 다른 작업을 진행하면 되지만 커밋하기에는 내용이 정리되어 있지 않고 오류를 포함한 코드들이 있을 수 있기에 커밋하기가 꺼려진다.
이런 경우에도 stash를 이용하여 아래와 같이 수행하면 커밋하지 않고 처리할 수 있다.
$ git stash -m "Stash Login to resolve hotfix"
$ resolve hotfix...
$ git commit -m "Fix in a hurry"
$ git stash pop
위의 흐름을 가볍게 살펴보자
git stash
를 통해서 기존 작업 내용을 임시저장하고 기존의 클린한 코드로 돌아가서 핫 픽스를 대응할 상태를 만든다.- 핫 픽스를 대응 후,
git commit -m "Fix in a hurry"
작업 내용을 커밋한다. - 이후에 다시 임시 저장되어 있던 기존 작업내용을
git stash pop
을 통해 가져온다.
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
Reference
Git - git-stash Documentation
A stash entry is represented as a commit whose tree records the state of the working directory, and its first parent is the commit at HEAD when the entry was created. The tree of the second parent records the state of the index when the entry is made, and
git-scm.com