aeFactory
[Git] git stash - 깃 작업 내용을 임시 저장하는 법 본문
Stash란?
git shash는 현재 하고 있던 작업을 커밋하지 않고 임시 저장할 수 있는 기능입니다. 현재 하고있는 작업보다 우선 순위가 높은 작업이 생기는 경우에 사용할 수 있습니다. 이 경우 stash를 사용하지 않으면 현재 작업 중인 내용을 reset 하거나 작업 내용을 남기고 싶다면 commit하는 방법을 생각해 볼 수 있는데, 작업 내용이 많은 경우 reset은 사용할 수 없고 commit은 공용 브랜치의 경우 미완성의 코드를 commit해서는 안되고 개인 branch인 경우에도 좋은 흐름은 아닙니다. 이 때 git stash를 사용하면 현재까지 작업한 내용을 안전하게 저장했다가 급한 일을 먼저 처리하고 다시 기존 작업 내용을 꺼내 작업할 수 있습니다.
git stash 명령어
명령어 | 기능 | 비고 |
$git stash |
현재 작업 내용을 stash 스택에 저장 | $git stash save에서 save 생략 |
$git stash list |
stash 스택의 내용을 리스트로 확인 | |
$git stash pop |
stash 스택에서 pop | 인수로 stash@{n}를 가질 수 있음 |
$git stash drop |
stash 스택에서 삭제 | 인수로 stash@{n}를 가질 수 있음 |
$git stash clear |
stash 스택을 모두 삭제 | |
$git stash apply |
stash 스택의 내용을 현재 소스에 적용 | 인수로 stash@{n}를 가질 수 있음 |
1. $git stash (save)
현재 tracked 상태인 파일작업 내용을 stash 스택에 저장하는 명령어로 save를 생략하고 사용할 수 있다. git이 관리하고 있는 tracked 상태인 파일만 stash에 담기기 때문에 untracked 파일까지 stash에 담고 싶다면 $git stash -u
를 사용해야한다.
옵션 | 기능 |
$git stash -u |
untracked 상태인 파일도 stash |
$git stash -m |
stash 메시지를 입력 |
2. $git stash list
stash 스택에 담긴 내용을 확인할 수 있다. stash@{n} 형식으로 써져있는 인수를 타겟을 지정할 수 있는 명령어와 함께 사용할 수 있다.
3. $git stash pop
stash 스택의 최상단 stash@{0}을 꺼내 적용한 후 해당 stash는 삭제한다. parameter로 stash@{n}를 주면 n 번째 stash를 적용한 후 이를 삭제한다.
4. $git stash drop
stash 스택의 최상단 stash@{0}를 삭제한다. parameter로 stash@{n}를 주면 n 번째 stash를 삭제한다.
5. $git stash clear
stash 스택 전체를 삭제한다.
6. $git stash apply
stash 스택의 최상단 stash@{0}을 꺼내 적용한다. 해당 stash는 삭제하지 않는다. parameter로 stash@{n}를 주면 n 번째 stash를 적용한다.
3. $git stash save
와 $git stash
push
Git documentation의 stashing에 관한 문서를 보면 $git stash save
와 $git stash push
에 관한 논의가 언급되어있다.
요약하자면 $git stash save
명령어를 $git stash push
명령어로 대체하자 라는 움직임인데, 이는 push는 가능한 pathspec을 save는 지원하지 않는 것에 기인했다고 합니다. pathspec은 깃 명령어에 대한 경로를 지정하는 방식입니다. 즉 push는 pathspec을 지원하고 save는 지원하지 않는다는 것이 의미하는 바는 push는 특정 경로(파일)에 대한 stashing이 가능하다는 의미입니다. 따라서 특정 파일만 임시 저장하고 싶으면 $git stash push <pathspec>
을 사용하면 됩니다.
'Git' 카테고리의 다른 글
[Git] commit message convention - 커밋 메시지 컨벤션 (0) | 2023.05.18 |
---|---|
[Git] git checkout switch restore - 브랜치를 옮기고 수정 사항을 복원하는 법 (0) | 2023.05.17 |
[Git] HEAD - 현재 브랜치의 최신 커밋 (0) | 2023.05.15 |
[Git] 깃의 3가지 작업 영역과 파일의 상태에 관한 LifeCycle (0) | 2023.05.14 |