오픈소스SW - chapter 7

로두마니·2025년 6월 11일

오픈소스

목록 보기
6/6
post-thumbnail

스태시

작업 브랜치를 변경하려면 워킹 디렉터리는 깨끗한(clean) 상태로 정리되어 잇어야 함
워킹 디렉터리에 작업 중인 내용이나 커밋되지 않은 변경 사항들이 남아 있으면 브랜치를 변경할 수 없음
현재 수정 작업을 멈추고, 다른 브랜치에 있는 코드를 수정하려면 스태시(stash) 기능을 사용할 수 있음
간단하게 설명 : '안전한 보관'

깃은 완료되지 않은 작업(커밋되지 않은 변경 내용)이 남아 있을 때, 현재 작업을 임시로 저장할 수 있는 스태시 기능을 제공
스태시는 '현재 워킹 디렉터리 내역을 별도의 스택 영역에 잠시 보관하라'는 명령임
스태시는 브랜치를 이동할 때 작업 중인 내용 때문에 워킹 디렉터리가 충돌하는 것을 방지하는 데 사용함
스태시 명령을 실행하면 현재 작업 중인 내용은 임시 저장되고, 수정 전 마지막 커밋 상태로 돌아감
이전 커밋 후 작업하지 않은 상태의 워킹 디렉터리가 됨

스태시를 하려면 stash 명령어를 실행함
기본 명령어로 스태시를 실행하거나 옵션을 사용하여 추가 기능을 선택할 수 있음
스태시는 로컬 저장소에서만 사용 가능함

스태시의 임시 스택 영역에 작업 중인 코드 저장
스태시 명령어는 수정 중인 내역을 커밋하지 않고도 브랜치를 이동할 수 있게 워킹 디렉터리를 깨끗이 청소함
커밋 대신 스태시 명령을 실행하면 됨
스태시는 영구적인 커밋 기록대신 현재 작업들을 임시 스택 영역에 저장

명령어

$ git stash

스태시 여러 개 생성 명령어

$ git stash save

스태시는 스택 구조로 여러 번 실행하여 저장할 수 있음
스태시가 여러 개 있을 때 각각의 스태시를 구별할 수 있도록 메시지도 추가할 수 있음

$ git stash save "WIP: 메시지~~~"

스태시의 저장 영역은 스택 구조임
스택 : FILO(First In Last Out) 구조, 마지막에 입력한 자료가 제일 먼저 출력되는 데이터 저장 방식임

스태시에 저장된 스택은 list 옵션을 사용하여 확인할 수 있음

$ git stash list # 스태시 목록 

stash 명령어로 저장된 객체들의 목록이 출력됨
스태시 이름은 stash@{번호} 형태로 순차적으로 부여됨
목록 번호는 0부터 시작

스태시를 실행한 후 방금 전의 스태시와 현재 워킹 디렉터리 간 차이를 확인

$ git stash show # 내용 비교

현재 워킹 디렉터리 내용과 스태시된 내용 간 파일 변화를 간략하게 출력함

$ git stash show -p stash@{0} 

스태시를 사용하는 목적은 현재 워킹 디렉터리를 커밋하지 않고 임시로 저장하기 위해서
임시 저장된 내용은 다른 수정 작업을 완료한 후에 다시 불러와 사용할 수 있음

임시 저장한 스태시 불러오기
버그ㅡ를 수정한 후 다시 원래의 작업 브랜치로 돌아옴
이전에 수정한 내역들이 남아 있지 않음
스태시에 임시 저장한 작업 내용들을 읽어 다시 적용할 수 있음

$ git stash pop #스태시 읽기

스택에서 저장된 작업 내용을 읽어 올 때는 제일 마지막에 저장된 내용을 읽어옴
데이터의 순차적 특징은 스택의 원리 때문

스태시의 스택에 저장된 작업 내용이 다시 적용됨
스태시는 스택에서 내용을 읽어 올 때 현재 브랜치의 워킹 디렉터리와 자동으로 병합함
자동 병합이 성공하면 읽어 온 내용을 스택에서 제거함
스태시에서 임시 저장된 작업 내용을 복원한 후 다시 스태시 목록을 확인함

$ git stash list # 스태시 목록 확인

스태시를 복원할 때 워킹 디렉터리의 상태는 깨끗해야 함
스택에 저장된 스태시 내용이 다시 워킹 디렉터리로 복구될 때, 수정된 작업 내용과 현재 워킹 디렉터리를 병합하기 때문임
복구되는 브랜치의 워킹 디렉터리가 깨끗하지 않다면 병합 과정에서 충돌이 발생할 가능성이 많음돌이 발생할 가능성이 많음

특히 스태시를 복원할 때 같은 파일에서 동일한 부분을 변경했다면 즉시 충돌이 발생함
스태시를 복원할 때 충돌이 생기면 직접 문제를 해결해야 함
복원하는 도중 충돌이 생기면 스태시는 스택에 저장된 내용을 자동으로 삭제하지 않음
직접 충돌을 해결한 후 스태시 목록을 수동으로 삭제해야 함
스태시 충돌이 예상된다면 스태시용 브랜치를 하나 생성해서 작업하는 것을 추천

새로운 브랜치를 생성한 후 스태시를 적용하는 명령어

$ git stash branch 브랜치이름

스태시 복사
스태시는 브랜치 작업들을 임시로 저장할 때 사용함
임시 저장된 작업을 스태시 명령 이전의 브랜치 상태로 되돌려 놓음
스태시를 사용한 저장과 복원은 서로 다른 브랜치에도 가능함
반드시 이전에 실행한 브랜치와 같은 브랜치에서 할 필요는 없음

다른 브랜치에서 스태시를 실행한 후 새로운 test 브랜치를 생성하여 스태시를 복원함
스태시 스택에 저장된 항목들은 어느 브랜치에서나 복원이 가능함
apply 옵션은 스택에 저장된 항목을 불러와 현재 브랜치로 복원함

$ git stash apply

스태시 복원 : 옵션 2개 pop, apply
pop 명령어 : 스택 내용을 복원한 후 스택 목록에서 자동으로 삭제함.
pop 명령어는 스택 내용을 워킹 디렉터리로 이동하는 것과 같음
apply 명령어 : 스택 목록을 읽은 후 자동으로 삭제하지 않기 때문에 반복적으로 스택에서 스태시 내용을 읽어올 수 있음
apply 명령어는 스태시 내용을 워킹 디렉터리로 복사하는 것과 같음

pop : 가져오기, apply : 복사

apply 명령어로 워킹 디렉터리를 복구할 때는 스택에서 자동으로 삭제되지 않는다. 이때 별도로 명령을 실행해야만 스태시 목록에서 삭제된다.

$ git stash drop

워킹 디렉터리 청소
clean 명령어를 사용해서 워킹 디렉터리에 있는 추적되지 않는 파일들을 찾아 삭제함
clean 명령어를 실행하는 순간 워킹 디렉터리의 추적되지 않는 모든 파일을 삭제함

$ git clean
$ git clean -f $ 잘못 삭제하는 것을 방지하
$ git clean -n $ 
$ git clean -d $ 추적되지 않는 파일만 별도로 삭제
$ git clean -x $ gitignore 파일에 등록한 파일은 삭제 X
profile
해적왕이 될 사나이

0개의 댓글