Git 저장소에 커밋하지 않고 임시 저장이 가능할까

근듀·2023년 5월 29일
0

궁금해요

목록 보기
3/15
post-thumbnail

❓ 커밋을 하지 않고 브랜치를 이동한다면 어떻게 될까?

sub 브랜치에서 새 파일을 만들고 커밋을 하지 않고 다시 main 브랜치로 checkout을 하면 어떻게 될까?


👉🏻 main 브랜치에는 index.html / sub 브랜치에는 index.html style.css

1. 상태에서 sub 브랜치에 script.js 파일을 만들어보자

Desktop/like-lion/folder (sub)
$ touch srcipt.js

2. 커밋을 하지않고 checkout으로 main 브랜치로 돌아가보자

Desktop/like-lion/folder (sub)
$ git checkout main

3. main 브랜치에 파일목록을 확인해보자

Desktop/like-lion/folder (main)
$ ls
index.html  srcipt.js

결과 : main 브랜치에 script.js 파일이 들어있다.


❓ 왜 일까

sub 브랜치에서 커밋하지 않고 main 브랜치를 전환하면
이동하기 전 sub 브랜치에서 수정한 내용을 보존하기 위해 해당 수정 내용을 main 브랜치로 switch 하면서 기존 파일에 덮어쓰기를 하게 되있다.


❗ 이를 해결하기 위한 방법

git stash 명령

아직 마무리 하지 않은 작업을 잠시 저장할 수 있도록 하는 명령어
이를 통해 아직 완료하지 않은 일을 commit 하지 않고 나중에 다시 꺼내와 마무리 할 수 있다.

git stash save '메세지'

위 명령으로 stash 임시저장소에 넣어놓고 저장된다.

goit stash list

위 명령으로 저장소에 있는 목록을 확인 할 수 있다.

git stash pop

위 명령으로 임시 저장해 놓은 내용을 꺼내서 이어서 수정하고 커밋할 수 있다.


직접 해보자


👉🏻 main 브랜치에는 index.html script.js / sub 브랜치에는 index.html style.css script.js

1. git stash 해보자

Desktop/like-lion/folder (sub)   
$ git stash save '임시 보관'
Saved working directory and index state On sub: 임시 보관

working derectory에 저장되었다고 나온다.

2. stash 영역에 저장 되있는지 확인해보자

Desktop/like-lion/folder (sub)   
$ git stash list
stash@{0}: On sub: 임시 보관

잘 저장되어있다.
중괄호( { } )안의 숫자는 해당 stash의 인덱스이다. 여러개가 저장되면 인덱스가 계속 올라간다.

이 상태에서 main 브랜치 내용을 확인하면 script.js 가 넘어가지 않은 것을 확인할 수 있다.

3. stash 된 내용 불러오기

Desktop/like-lion/folder (sub)   
$ git stash pop
On branch sub
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)   
        modified:   script.js

잘 불러왔다.


⚠️ 주의점
저장할 변경 사항은 git에서 추적하고 있는 상태의 파일이여야만 stash 명령이 먹힌다. git하고 연결되지 않은 파일이면 no local changes to save 에러가 발생한다. 추적하지 않는 파일을 저장하고 싶을 시 git stash --include-untracked 명령어를 사용하면 된다.

profile
프론트엔드 개발자 취준생입니다.

0개의 댓글