브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 다른 파일을 먼저 커밋해야하는 경우가 생긴다면 어떻게 할까요??
아직 커밋하지 않은 파일들을 그냥 두어도 상관없지만 계속 커밋하라는 메세지가 나타나 번거로울수 있습니다.
또한 실수로 다른 파일과 같이 커밋될수도 있습니다.
이러한 경우 커밋하지 않고 작업중인 파일들을 잠시 감출수 있습니다.
그리고 다른 작업을 끝마친후 감춘 파일을 다시 가져올수 있게됩니다.
이러한 방법에 대해서 알아볼까요?
먼서 홈디렉터리에 stashtest라는 저장소를 만들겠습니다.
$cd ~
$git init stashtest
$cd stashtest
이때 stash 명령을 사용하려면 파일이 tracked 상태여야 합니다.
최소 한번은 커밋한 상태에서 가능하다는 의미입니다.
vim을 이용해서 a1.txt파일을 만들고 "a1"이라는 메세지로 커밋하겠습니다.
파일의 내용은 아무 내용이나 간단하게 작성하겠습니다.
$vim a1.txt
$git add a1.txt
$git commit -m "a1"
같은 방식으로 a2.txt파일도 "a2"메세지로 커밋하겠습니다.
$vim a2.txt
$git add a2.txt
$git commit -m "a2.txt"
이제 두개의 파일 모두 내용을 수정한뒤 다시 저장합니다.
그리고 git status명령을 이용해볼게요
$vim a1.txt
$vim a2.txt
$git status
a1.txt파일과 a1.txt파일이 수정되었다는 메세지가 나옵니다.
하지만 이파일들을 커밋하기전에 다른 파일을 먼저 작업하고 커밋해야 하는 상황이라고 가정했을때는 어떻게 할까요??
git stash 또는 git stasg save명령을 이용해 다른 장소에 잠시 보관할수 있습니다.
$git stash
$git status
git stash명령을 입력하면 saved working directory and index state WIP on master라는 문구가 나오고 다시 git status를 입력하면 nothing to commit 이라는 문구가 나옵니다.
stash 명령으로 파일들을 잠시 감추어 놓았습니다.
이렇게 감춘 파일들은 먼저 감춙것부터 stash@{0}부터 들어가게 되는데 다른파일이 다시 들어오게 되면 기존의 파일이 stash@{1}이 되고 새로 들어오는 stash@{0}으로 들어오게 됩니다.
다시 말해서 가장 최근에 들어온 것이 stash@{0}이 되는것입니다.
이러한 방법을 스택(stack)이라고 하며 스택은 선입후출(FILO : First in Last out)이라고 합니다.
이렇게 stash를 이용해 감춘 파일들은 git stash list 명령을 통해 확인할수 있습니다.
$git stash list
이렇게 감춘 파일들을 다시 꺼내기 위해서는 git stash pop 명령을 통해 꺼내올수 있습니다.
하지만 이 명령은 0번부터 꺼내오게 되는데요.
가장 최근에 감춘 내역부터 꺼내오게 됩니다.
선입후출 방법임으로 먼저 들어간게 나중에 나오게 됩니다!
$git stash pop
stash 목록에 저장된 수정 내용을 나중에 또 사용하게 될 경우가 있을수 있습니다.
이러한 경우 git stash apply 명령을 사용합니다.
stash 목록에서 가장 최근 항목을 되돌리지만 저장했던 내용은 그대로 남겨둡니다.
$git stash apply
git stash drop 명령은 stash 목록의 가장 최근 항목을 삭제합니다.
$git stash list
$git stash drop
list를 다시 확인했을때 아무것도 나오지 않는걸 확인할수 있습니다!
본 포스팅은 DO it! 지옥에서 온 문서 관리자 깃&깃허브 입문 도서를 참고하며 공부한 내용을 포스팅 하였습니다.
'Git > Github' 카테고리의 다른 글
[Git & GitHub] 원격저장소에 파일 올리고 내려받기(push & pull) (0) | 2022.06.24 |
---|---|
[Git & GitHub] 원격저장소와 지역저장소 연결 (0) | 2022.06.23 |
[Git & GitHub] branch 관리 (0) | 2022.06.21 |
[Git & GitHub] 같은문서 수정 후 merge / 브랜치 삭제 (0) | 2022.06.20 |
[Git & GitHub] 브랜치(branch) 병합(merge) (0) | 2022.06.19 |