워킹 디렉토리가 정리되지 않은 경우 checkout 불가
commit을 할 수 없다면 stash를 통해 임시저장할 수 있음
git stash
현재 워킹 디렉토리의 내역을 별도의 스택영역에 잠시 저장하고 수정 전인 마지막 커밋상태로 돌아감
이러한 경우에 사용할 수 있음
코드 수정중이므로 체크아웃 할 수 없다
stash
는 수정중인 내역을 커밋하지 않고도 브랜치를 이동할 수 있도록 워킹디렉토리를 청소해주고, 현재 작업들을 영구적 커밋이 아닌 임시 스택 영역에 저장한다.
$ git stash
//혹은, 스태시 여러개를 생성할 때 유용
$ git stash save
// 스태시를 구분할 수 있도록 메시지 추가 가능
$ git stash save "WIP : 메시지~~"
//혹은
$ git stash -m "메시지메시지"
스태시는 FILO의 스택구조이다
git stash list
를 통해 저장된 스택을 확인할 수 있다.
스태시는 stash@{번호} 형태로 저장된다
git stash show
를 통해 현재 워킹디렉토리와 스태시된 내용을 간략히 비교할 수 있고 -p옵션을 더하면 git diff처럼 상세히 볼 수 있다.
작업중이던 브랜치로 이동 한 후
git stash pop
스태시는 스택구조로 저장되므로 제일 마지막에 저장된 내용을 읽어온다.
스태시는 스택에서 내용을 읽어올 때 현재 브랜치의 워킹디렉토리와 자동으로 병합하고 자동병합이 성공하면 읽어온 내용을 스택에서 제거한다.
스태시로 복원 시 워킹디렉토리만 되돌려놓는데, 스테이지에 등록된 스테이지 상태까지 복구하려면 --index옵션을 사용
git stash apply --index
스태시 복구 시 현재 브랜치의 워킹디렉토리는 깨끗해야한다. 스태시가 복원될 때 자동으로 병합하기 때문이다.
만약 그렇지 않다면 충돌이 발생할 수 있는데,
복원 도중 충돌이 발생하면 스태시 스택에 저장된 내용은 자동삭제되지 않는다.
충돌이 예상된다면 스태시용 브랜치를 하나 생성해서 작업하는것이 좋다.
git stash branch 브랜치이름
브랜치 생성과 동시에 스태시 임시 작업 내용이 복원되어 저장된다.
스태시 스택에 저장된 항목들은 어느 브랜치에서나 복원이 가능하다.
(master에서 stash 저장하고 feature에서 stash를 복원할 수 있음)
apply
옵션을 이용해 현재 브랜치로 복원함
$ git stash apply
stash를 복원하는 옵션은 pop과 apply가 있다.
pop은 복원 후 해당 stash가 삭제되고, apply는 삭제되지 않아 다른 브랜치에서도 사용할 수 있다.
test에서 feature브랜치로 이동 후
git stash list를 해도 stash의 목록이 확인된다.
pop과 달리 apply는 마지막 내용이 아닌, 스택 목록의 중간 작업을 지정할 수 있는데, apply옵션 뒤에 stash@{index}를 통해 사용할 수 있다.
$ git stash apply stash@{0}
// 스택의 번호를 지정하지 않을 경우
$ git stash apply
// 가장 최신 스태시로 복원됨
git stash drop
가장 최근 스태시가 삭제됨
git clean
명령어를 통해 워킹 디렉토리에 있는 추적되지 않는 파일들을 찾아 삭제
-f
: 강제 삭제
-n
: 가상으로 clean명령어를 실행해본 후 사용자에게 확인요청
-d
: 워킹 디렉토리 삭제 과정에서 새롭게 생성된 파일, 즉 추적되지 않는 파일만 별도로 삭제. 이 옵션은 untracked파일만 삭제함. -f와 함께 사용 가능
-x
: .gitignore에 등록한 파일은 삭제하지 않는데, 이 파일들도 삭제하기 위해 사용