@마크다운
# 7.3
#Stashing and Cleaning
## stashing
### stash 만들기
Stash 명령 사용시 working directory에서 수정한 파일들만 저장한다.
Modified, Tracked, Staging Area파일들을 보관해두는 장소
아직 작업중인 사항을 스택에 저장하는것
![git stash](/Users/hongdonghyun/projects/til/images/7.3 stash_1.png)
```
git stash
modified 상태의 파일이 git stash 명령 사용후 상태가 깨끗해졌다.
```
![git stash list](/Users/hongdonghyun/projects/til/images/7.3stash_2.png)
**!**
```
git stash list
```
**!**
#### stash를 만드는 새로운 방법
```
git stash --keep-index
```
이미 Staging Area에 들어 있는 파일을 stash 하지 않는다.
많은 파일을 변경했지만 몇가지 파일만 커밋하고 나중에 처리하고 싶을때 사용
Untracked 파일과 Tracked파일을 같이 stash하는 경우도 많다.
Untracked파일도 같이 저장하려면 **"--include-untracked"** or **"-u"** 옵션을 붙여준다.
### 다시적용하기
**"git stash apply"**를 사용하여 Stash를 다시 적용할 수 있다.
```
git stash apply
```
**"git stash"** 명령을 실행하면 Stash를 다시 적용하는 방법도 알려줘서 편리하다.
```
git stash
```
**"git stash apply stash@{2}"**처럼 Stash 이름을 입력하면 골라서 적용할 수 있다.
이름이 없으면 Git은 가장 최근의 Stash를 적용한다.
```
git stash apply stash@{2}
```
Git은 Stash를 적용할 때 Staged 상태였던 파일을 자동으로 다시 Staged 상태로 만들어 주지 않는다.
그래서 --index 옵션을 주어 Staged 상태까지 적용한다.
**"git stash apply --index"** 명령을 사용하여 원래 작업하던 상태로 돌아올 수 있다.
```
git stash apply --index
```
### stash 스택 삭제
apply 옵션은 stash를 적용하기만 할뿐 삭제는 하지 않는다 즉, stash는 여전히 스택에 남아있다.
이때 **"git stash drop"**명령을 사용하여 해당 stash를 제거한다.
```
git stash drop (가장 최근것) or
git stash drop stash@{number} (선택삭제)
```
**"git stash pop"**이라는 명령어는 stash를 적용하고나서 바로 스택에서 제거해준다.
```
git stash pop
```
**"git stash --patch"** 옵션을 붙이면 수정된 모든 사항을 저장하지 않는다. 대신 프롬프트가 뜨며 저장할것과 저장하지 않을 것을 지정할 수 있다.
```
git stash --patch
```
### stash를 적용한 브랜치 만들기
![](/Users/hongdonghyun/projects/til/images/7.3stash_3.png)
**"git stash branch branch_name"** 명령을 실행하면 브랜치를 만들고 적용하며 checkout한다.
```
git stash branch branch_name
```
## Clean
### working directory 청소하기
**"git clean"**은 Merge나 외부 도구가 만들어낸 파일을 지우거나 이전 빌드 작업으로 생성된 각종 파일을 지우는 데 필요하다.
**신중하게사용해야 한다. 명령을 사용하면 working directory안의 Untracked상태 파일도 지워지기 때문인다.**
```
git clean
```
**"git stash -all"**명령을 사용하면 지우는건 같지만 먼저 파일들을 stash한다.
```
git stash -all
```
**"git clean -f -d"**명령은 하위 디렉토리까지 모두 지워버린다.
```
git clean -f -d
```
**"git clean -d -n"**명령을 사용하면 가상으로 실행하여 어떤파일이 지워지는지 알아볼 수 있다.
```
git clean -d -n
```
#### git clean
"git clean"명령은 Untracked파일만 지우는게 기본이다. ".gitignore"에 명시했거나 무시되는 파일은 지우지 않는다.
무시된 파일 까지 지우려면 **'-x'**옵션을 사용한다.
```
git clean -d -x
```
'notes' 카테고리의 다른 글
SQL 기초정리 (0) | 2017.08.28 |
---|---|
vim 단축키 (0) | 2017.08.28 |
git 기초 (0) | 2017.08.28 |
pickycookbook project 에서 사용된 네이버 레시피 크롤러 (0) | 2017.08.23 |
2017-06-18 markdown 문법 필기 (0) | 2017.07.21 |