ㅇ.ㅇ
[Git] Stash 본문
반응형

stash 기능은 전에도 자주 사용해 보았는데, 이번에도 기능개발 중에 stash를 사용하다가 몇 가지 몰랐던 명령어들을 알게 되어 정리를 해보려고 한다.
1. 기본 Stash 명령어
git stash
현재 작업 중인 변경 사항을 저장(stash)하고, 작업 디렉토리를 깨끗한 상태로 되돌린다.
git stash
- 추적된(tracked) 파일의 변경 사항을 저장하고, 작업 디렉토리를 마지막 커밋 상태로 초기화한다.
- 새로운 파일(추적되지 않은 파일, untracked)이나 무시된 파일(ignored)은 기본적으로 stash에 포함되지 않는다.
git stash push
보다 명확하게 stash를 저장하는 방법. 메시지와 함께 저장할 수도 있다.
git stash push -m "메시지"
- -m 옵션을 사용하면 특정 메시지를 추가할 수 있어서 이후에 구별하기 쉽다.
2. stash 목록 확인
git stash list
현재 저장된 stash 목록을 확인한다.
git stash list
// 출력예시
stash@{0}: WIP on feature-branch: 123abc Commit message stash@{1}: WIP on main: 456def Commit message
stash@{2}: WIP on develop: 789ghi Commit message
- stash@{n} 형식으로 각 stash가 저장되어 있다.
- 최신 stash가 stash@{0}, 그 이전 것이 stash@{1}, stash@{2} 순으로 쌓인다.
3. stash 적용 (복구)
git stash apply
stash의 내용을 현재 브랜치에 적용한다. 하지만 stash 목록에서 제거되지는 않는다.
git stash apply stash@{0}
- stash@{0}을 현재 작업 디렉토리에 적용한다.
- stash는 유지되므로 같은 stash를 여러 번 적용할 수 있다.
git stash pop
stash의 내용을 현재 브랜치에 적용한 후 stash 목록에서 제거한다.
git stash pop stash@{0}
- apply와 달리 stash에서 삭제된다.
- stash가 목록에서 삭제되므로 신중하게 사용해야 한다.
4. stash 내용 확인
git stash show
stash의 변경된 파일 목록을 확인한다.
git stash show stash@{0}
// 출력예시
src/app.js | 2 ++ src/style.css | 1 +
- 어떤 파일이 변경되었는지 확인할 수 있다.
git stash show -p
stash에 저장된 변경 사항의 상세(diff) 내용을 확인한다.
git stash show -p stash@{0}
- -p 옵션을 추가하면 git diff처럼 변경된 코드가 표시된다.
5. 특정 파일만 stash에서 복구
git checkout stash@{0} -- 파일명
stash의 특정 파일만 가져오고 싶을 때 사용합니다.
git checkout stash@{0} -- src/app.js
- src/app.js 파일만 stash에서 가져온다.
- 전체 stash를 적용하지 않고 특정 파일만 복구할 수 있다.
6. stash 삭제
git stash drop
특정 stash를 목록에서 삭제한다.
git stash drop stash@{0}
- stash@{0}을 삭제한다.
- 복구가 불가능하므로 신중하게 사용해야 한다.
git stash clear
모든 stash를 삭제한다.
git stash clear
- stash 목록을 완전히 비운다.
- 되돌릴 방법이 없으므로 주의 필요!
7. 특정 stash를 새로운 브랜치로 만들기
git stash branch
stash의 내용을 새로운 브랜치로 체크아웃하여 적용한다.
git stash branch new-branch-name stash@{0}
- stash를 적용할 새로운 브랜치를 자동으로 생성한다.
- stash의 변경 사항을 복구하면서 기존 stash는 유지된다.
GPT가 말해준 그 외 유용한 stash 명령어 정리
명령어 | 설명 |
git stash | 현재 변경 사항을 stash에 저장 |
git stash push -m "메시지" | 메시지를 추가하여 stash 저장 |
git stash list | stash 목록 확인 |
git stash show stash@{n} | 특정 stash 변경 사항 요약 확인 |
git stash show -p stash@{n} | 특정 stash 변경 사항 상세(diff) 확인 |
git stash apply stash@{n} | 특정 stash 적용 (삭제되지 않음) |
git stash pop stash@{n} | 특정 stash 적용 후 삭제 |
git checkout stash@{n} -- 파일명 | stash에서 특정 파일만 가져오기 |
git stash -u | untracked 파일도 포함하여 stash 저장 |
git stash -a | ignored 파일까지 포함하여 stash 저장 |
git stash drop stash@{n} | 특정 stash 삭제 |
git stash clear | 모든 stash 삭제 |
git stash branch new-branch-name stash@{n} | stash를 새로운 브랜치로 복구 |
반응형
'Today I Learned' 카테고리의 다른 글
[DEV] curl (0) | 2025.03.30 |
---|---|
[Tomcat] Tomcat의 war-tracker 파일 (0) | 2025.03.28 |
[Java] META-INF 디렉토리와 MANIFEST.MF (0) | 2025.03.12 |
[Java] try-with-resources (자원 관리 최적화) (1) | 2025.03.11 |
[DEV] SBOM에 대하여 (0) | 2025.03.09 |