우아한 테크코스/테크코스

[Git] stash(임시저장)

jamie. 2020. 3. 9. 15:39
반응형

Git stash

Stash : 숨기는 장소

git stash

commit을 하지 않고, 임시 저장

대상 파일

- 추적 상태인 파일을 수정한 것

    > 추적 상태 : 과거에 이미 commit해서 스냅샷에 넣어진 관리 대상의 파일

- Stage 상태의 파일

    > add된 파일

임시 저장하기

/* 이전 커밋메시지로 임시 저장하기 */
$ git stash
$ git stash save
// 예시
$ git stash
Saved working directory and index state WIP on jamie-step2: 650988a [리팩터링] 스트림 수정

/* 메시지로 임시 저장하기 */
$ git stash save 메시지
// 예시
$ git stash save "변경내역"
Saved working directory and index state On jamie-step2: 변경내역

내용 확인하기

$ git stash list
stash@{0}: WIP on jamie-step2: 650988a [리팩터링] 스트림 수정
stash@{1}: On jamie-step2: 변경내역
stash@{2}: On jamie-step2: 변경내역
stash@{3}: WIP on jamie-step2: 650988a [리팩터링] 스트림 수정
stash@{4}: WIP on jamie-step2: 650988a [리팩터링] 스트림 수정

내용 불러오기

/* 가장 최근 stash 복구 */
$ git stash apply

/* stash 지정도 가능 */
$ git stash apply stash@{2}

/* index 옵션시, stage 상태라면 stage 상태로 복구 */
$ git stash apply --index

불러오면서 내용이 겹치는 경우엔 conflict 발생함 :)

conflict - 충돌하면서 파일에 충돌된 부분이 적용됨, 직접 수정하고 add commit 해주면 됨

$ git stash apply stash@{2}
Auto-merging src/main/java/lotto/domain/TotalResult.java
CONFLICT (content): Merge conflict in src/main/java/lotto/domain/TotalResult.java

내용 불러오면서 불러온 stash 제거

/* 복구, stash 제거 / 단 non-stage 상태 */
$ git stash pop

/* stash 지정도 가능 */
$ git stash pop stash@{2}

/* 만약 stage 상태였다면 stage 상태로 돌려줌 */
$ git stash pop --index

삭제하기

/* 가장 위(최근)의 stash 제거 */
$ git stash drop
Dropped refs/stash@{0} (2ad204361515d6c931ef41004a0a81dd69050cc7)

/* 지정 제거 */
$ git stash drop stash@{2}
Dropped stash@{2} (3587701f2f06faf4316d3ec6bb3f77c23fb02085)

/* 전부 제거 */
$ git stash clear

개인적으로 임시로 파일 수정하고 롤백할 때 쓰면 편한 것 같음!

반응형