임시 처리

스태시

작업 브랜치를 정리하려면 워킹 디렉터리는 항상 클린 상태여야 한다.

현재 작업을 임시로 보관하는 스태시 기능

기존 작업 도중에 새로운 변경 요청

새 브랜치에 변경 요청을 작업

새 코드 작성 중 기존 코드를 수정

새 브랜치로 작업 시도 → 워킹 디렉터리에 커밋하지 않은 작업이 남아있어 브랜치 변경이 불가능.

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 : 강제 삭제 처리함.

© 2024. Chiptune93 All rights reserved.