git stash 명령 모음
작업 내용 stash에 저장
stash 목록 확인
추적되지 않는 파일 포함해서 stash에 저장
특정 명칭을 지정해서 저장
가장 최근에 저장한 stash 적용
staged 상태까지 적용(복원)
특정 Stash 선택해서 적용
가장 최근 stash 제거하기
특정 stash 제거
apply + drop을 한번에 하는 수행하는 명령어 pop
모든 stash 목록 삭제
Stash 적용한 Branch 만들기
기능
▶ 작업 하고 있던 변경내역을 임시로 저장할 수 있는 명령어
- 옵션에 따라 다르지만 기본적으로 commit 되기 이전 변경 내역을 stash 영역에 보관한다.
※ commit 되기 이전 = Staging Area 영역(After git add) + Working Directory (Before git add)
※ commit 과는 또다른 의미의 (임시) 저장
- 파일을 최초 생성하고 git add 하지 않은(아직 git 에서 추적되지 않는) 내용은 stash 영역에 저장되지 않는다.
※ "-u" 옵션을 통해서 추적되지 않는 변경내용도 저장 가능
(git add 처리해서 추적하고 git stash 할 수도 있을 것이다. )
- Stash 저장한 내역은 Branch 구분없이 Push / Pop 할 수 있다.
내용에 따라서는 충돌(Conflict)이 발생할 수 있다.
- Stack 구조이기에 가장 먼저 저장된 Stash가 가장 나중에 삭제된다. (LIFO (Last In First Out))
※ 특정 Stash를 지정해서 처리 가능하다.
상황 예시
특정 Branch A 에서 작업을 하다가 잠깐 다른 Branch B로 이동하여 작업할 때,
현재 변경내용을 commit 하기 애매한 경우가 있다.
아직 완료하지 않은 작업을 commit 하는 것은 유쾌하지 않다.
ex) 현재 Branch에서 작업을 했지만 다른 Branch에 적용하고 싶은 경우
(무심코 다른 Branch에서 작업하던 것을 알아차린 경우)
ex) 특정 기능 구현 중이고, 아직 commit을 하기에는 애매한 단계라고 했을 때,
다른 Branch에서 발생한 버그를 고쳐야 하는 경우
ex) 동료가 최신 상태 코드가 이상하다고 요청하는 경우
작업 내용을 저장하기 전에 다른 Branch로 이동하지 못하는 상황
이때, 현재까지의 변경 내용을 임시 저장하고, 다른 Branch에서 작업 후 돌아와서
다시 꺼내서 사용하는 용도로 주로 이용된다.
시뮬레이션
작업 내용 stash에 저장
기본 명칭은 "WIP"로 저장된다.
(A) Modify → Add → Commit → Push = Remote Repository
(B) Modify → Add → Commit = Local Repository
(C) Modify → Add = Staging Area (Index)
(D) Modify = Working Directory
git stash 처리한 후에는
아래와 같이 commit 이전까지의 내역들은 stash에 보관되어 사라진다.
남아있는 내용
(A) Modify → Add → Commit → Push = Remote Repository
(B) Modify → Add → Commit = Local Repository
stash 목록 확인
▶ 명시적으로 삭제하지 않으면 목록에 계속 남아 있다.
추적되지 않는 파일 포함해서 stash에 저장
ex) 최초 파일 생성 후 아직 git add 하지 않은 내용
특정 명칭을 지정해서 저장
가장 최근에 저장한 stash 적용
▶ 목록에는 사라져 있지 않으면 목록까지 관리하기 위해서는 "drop"이나 "pop" 필요
▶ 기존에 add 했던 내용도 복원(적용)시에는 git add 하지 않은 상태로 복원된다.
staged 처리 상태까지 복원하려면 --indexed 옵션 사용
▶ 충돌이 발생하는 경우에는 해당 파일에서 알려준다.
staged 상태까지 적용(복원)
▶ git add 처리한 상태까지 반영되어 적용된다.
특정 Stash 선택해서 적용
▶ {Stash ID}는 git stash list에서 보여지는 첫번째 단어
ex) stash@{0}
가장 최근 stash 제거하기
▶최근에 stash 등록될 수록 낮은 인덱스 숫자에 위치한다.
Stack 구조이기에 LIFO(Last In First Out) 처리로 최근에 stash 등록된 stash@{0} 이 삭제된다.
(인덱스는 자동적으로 감소되는 것을 확인할 수 있다.)
▶ apply 옵션은 stash를 적용하는 것이기에 해당 stash는 스택에 여전히 남아있다.
스택에 남아 있는 stash를 삭제하려면 drop을 사용할 수 있다.
특정 stash 제거
▶ {stash ID} 은 list 명령어로 보이는 첫번째 단어
ex) stash@{0}
apply + drop을 한번에 하는 수행하는 명령어 pop
최신 stash를 적용하면서 목록에서 제거해주는 수행을 해준다.
stash를 적용하면서 충돌이 발생한 경우에는 목록에서 제거되지 않고 남아 있다.
이때는 충돌된 내용을 해결하고, 목록에서는 drop 처리해주면 된다.
모든 stash 목록 삭제
Stash 적용한 Branch 만들기
▶ Stash 목록에 저장된 내역이 있어야 한다.
▶ Stash 할 당시의 커밋을 Checkout 한 후 새로운 브랜치를 만들고 여기에 적용합니다.
이 모든 것이 성공하면 Stash를 삭제합니다.
(새로운 Branch 생성 및 checkout → stash 적용 및 목록 삭제)
Rerference
- Git 목록
'Git' 카테고리의 다른 글
[Git 깃] git add (0) | 2021.03.13 |
---|---|
[Git 깃] git status (0) | 2021.03.13 |
[Git 깃] git push (0) | 2021.03.13 |
[Git 깃] git log (0) | 2021.03.13 |
[Git 깃] git init (0) | 2021.03.13 |
댓글