임시 처리
스태시
작업 브랜치를 정리하려면 워킹 디렉터리는 항상 클린 상태여야 한다.
현재 작업을 임시로 보관하는 스태시 기능
기존 작업 도중에 새로운 변경 요청
새 브랜치에 변경 요청을 작업
새 코드 작성 중 기존 코드를 수정
새 브랜치로 작업 시도 → 워킹 디렉터리에 커밋하지 않은 작업이 남아있어 브랜치 변경이 불가능.
dk@Chiptune gitstudy07 % git checkout master
error: 다음 파일의 로컬 변경 사항을 체크아웃 때문에 덮어 쓰게 됩니다:
stash.htm
브랜치를 전환하기 전에 변경 사항을 커밋하거나 스태시하십시오.
중지함
스태시의 임시 스택 영역에 작업 중인 코드 저장
브랜치를 이동할 수 있게 워킹 디렉터리를 청소해야 함.
현재 작업들을 임시 스택 영역에 저장
git stash
또는 git stash save
를 사용.
dk@Chiptune gitstudy07 % git stash save
Saved working directory and index state WIP on feature: 4660521 new feature start
스태시 저장 시, 메세지를 남기기 위해 git stash save "message"
를 사용하기도 함.
스태시 기능을 사용하지 않는 다면, 작업 중인 내용을 강제로 커밋 후 다시 리셋해서 복원해야 한다.
git commit -am "temp"
// 다른 브랜치 작업 ..
// 다시 현재 브랜치로 돌아옴
git reset -soft HEAD^
임시 저장 영역의 스택목록
스태시는 FILO 구조로 이루어진다.
git statsh init
을 통해 현재 스태시 확인이 가능하다.
dk@Chiptune gitstudy07 % git stash list
stash@{0}: WIP on feature: 4660521 new feature start
git stash show
를 이용해 스태시와 현재 워킹 디렉터리와의 차이를 조회할 수 있다.
dk@Chiptune gitstudy07 % git stash show
stash.htm | 1 +
1 file changed, 1 insertion(+)
임시 저장한 스태시 불러오기
git stash pop
을 이용해 제일 마지막에 저장된 스태시 내용을 불러올 수 있다.
스태시는 불러오면서 현재 브랜치 워킹 디렉터리와 자동으로 병합된다.
dk@Chiptune gitstudy07 % git stash pop
현재 브랜치 feature
커밋하도록 정하지 않은 변경 사항:
(무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
(use "git restore <file>..." to discard changes in working directory)
수정함: stash.htm
커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
사용하십시오)
Dropped refs/stash@{0} (ed1d7e9acbeb02c7d31433d56b225c45fface43b)
스태시는 스택에 저장할 때는 워킹 디렉터리와 스테이지 영역의 파일까지 모두 보관. 스태시로 복원할 때에는 워킹 디렉터리만 돌려놓는다. 따라서, 스테이지에 등록된 스테이지 상태까지 복구하길 원한다면
--index
옵션을 사용한다.$ git stash apply —index
스태시 복원으로 충돌
복원하는 도중 충돌이 생기면 스태시는 스택에 저장된 내용을 자동으로 삭제하지 않음.
따라서, 충돌이 생기면 수동으로 문제를 해결 후 수동으로 삭제해야 함.
스태시 복사
스태시 스택에 저장된 항목들은 어느 브랜치에서나 복구가 가능하다.
git stash apply
명령을 통해 현재 브랜치로 스태시를 복원한다.
- pop 명령 → 스택 내용을 복원 후 내용 자동 삭제
- apply 명령 → 스택 목록을 읽은 후 자동으로 삭제하지 않음
스태시 작업이 여러개 일 경우, git stash apply stash@{1}
명령을 통해 번호를 지정하여 적용할 수 있다.
스태시 삭제
git stash drop
명령으로 스태시를 삭제할 수 있다.
소스트리에서 스태시 사용
워킹 디렉터리 청소
clean
명령을 사용하여 워킹 디렉터리에 있는 추적되지 않은 파일을 찾아 삭제할 수 있다.
dk@Chiptune gitstudy07 % echo "this is temp" > temp.htm
dk@Chiptune gitstudy07 % git status
현재 브랜치 feature
커밋하도록 정하지 않은 변경 사항:
(무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
(use "git restore <file>..." to discard changes in working directory)
수정함: stash.htm
추적하지 않는 파일:
(커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
temp.htm
커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
사용하십시오)
dk@Chiptune gitstudy07 % git clean
fatal: clean.requireForce 기본값이 true이고 -i, -n, -f 옵션 중 하나도 쓰지 않았습니다. 지우지 않습니다
dk@Chiptune gitstudy07 % git clean -f
temp.htm 제거
삭제 명령의 경우 민감하기 때문에 몇가지 옵션을 같이 사용해야 한다.
- -n : 파일을 가상으로 삭제 해보고 사용자에게 확인을 요청함.
- -d : untracked 상태의 파일만 삭제.
- -x : clean 명령은 .gitignore 파일에 정의된 파일을 삭제하지 않는데, 이 옵션은 같이 삭제함.
- -f : 강제 삭제 처리함.