[git] git stash 알아보기

김성수·2023년 5월 24일
0

github

목록 보기
3/11

들어가면서

pull request를 연습하면서 아무것도 모르고 무작정 index.html을 변경했다가
push가 안되는 문제에 맞닦뜨렸다. 그 원인과 해결해나가는 과정을 담아본다.



왜 문제가 발생했을까?

pull request할 때 주의점은 synced 되어있어야 한다는 것이다.

예를 들어 다른 사람의 원격 저장소를 수정하고 pull request 하기 위해

fork 하고, pull 해서 내 로컬 저장소에 가져왔다고 가정해보자.


내가 수정을 하는 동안 원격 저장소 주인이 해당 리포지토리를 수정했다면

내가 변경한 내용과 commit 이력이 다르게 되면서 충돌이 발생하게 된다.



문제 발생 시점

일단 sync를 맞춘 뒤에 다시 pull 했다. 그런데 pull이 안되는 문제가 발생한다.


원격 저장소를 pull한 로컬 저장소에서 이미 index.html 파일을 수정해준 상태이다. 즉, commit 이력이 있는 상태에서 sync 정보를 pull하면 또 충돌이 일어나게 되는 것이다.


두가지 방법이 있을 것이다.

내가 수정한 내용을 지운다

or

git stash를 사용한다.



git stash란?

git stash를 사용하면 현재 변경한 작업 정보를 stack에 저장해놓고 작업 이전의 상태로 되돌려 보내준다.

예를 들어, 나는 아래와 같이 수정을 한 상태였다.

kkapyo
ksungsu
ksungsuTwo
aaa // 내가 추가한 부분
ccc // 내가 추가한 부분


그런데 누군가가 ksungsuTwo 아래에 다른 내용을 아래와 같이 추가하였다.

kkapyo
ksungsu
ksungsuTwo
insert other // 다른 사람이 추가한 내용(내가 추가한 부분 aaa와 충돌 발생!)


그런데 이 상태에서 내가 git stash를 사용하면

kkapyo
ksungsu
ksungsuTwo

수정하기 전인 위와 같은 상태로 원복하게 된다. 그리고 해당하는 작업 내역은 stack에 담긴다.


이 상태에서 sycn를 맞추게 되면 정상적으로 업데이트된 파일을 가져올 수 있게 된다.





알게된 점

git stash의 원리와 사용 방법을 알게 되었다.

되게 간편하고 편리한 작업이라고 생각든다.


내가 작업한 이력을 스택에 담아 놓기 때문에 나중에 필요할 때 다시 사용할 수도 있을 것이다.

그리고 스택에 담겨져있는 내역도 pop()을 이용해 삭제할 수 있다.

profile
깊이 있는 소프트웨어 개발자가 되고 싶습니다.

0개의 댓글