본문으로 건너뛰기
개발 머꼬
개발 노트Git
hohyeon.dev19

git stash pop에서 충돌 났을 때 stash가 사라질까 봐 불안했던 이유

  • #Engineering Note
  • #Git

문제 발생

작업 중이던 변경사항을 git stash로 잠시 치워두고 다른 브랜치 작업을 하다가, 다시 git stash pop으로 복원하려는데 충돌이 발생했습니다. 이 상태에서 뭘 어떻게 해야 stash 내용을 잃지 않는지 확신이 없어 불안했습니다.

원인 분석

git stash pop은 내부적으로 두 단계입니다 — (1) stash 내용을 현재 작업 디렉터리에 적용(apply)하고, (2) 성공하면 그 stash 항목을 스택에서 제거(drop)합니다. 충돌이 발생하면 이 중 2단계가 실행되지 않습니다 — Git은 안전을 위해 적용이 완전히 성공적으로 끝나지 않은 stash를 지우지 않습니다.

pop 도중 충돌이 나도 stash 항목은 스택에 그대로 남아 있습니다. 이 사실을 모르면 "충돌을 잘못 처리하면 작업 내용이 통째로 사라지는 것 아닐까"라는 불필요한 공포 속에서 충돌을 해결하게 됩니다.

해결 방안

  1. 충돌이 나도 침착하게 일반 merge 충돌과 똑같이 해결합니다 — 충돌 마커(<<<<<<</=======/>>>>>>>)를 정리하고 git add로 해결된 파일을 표시합니다.
  2. 충돌 해결을 마친 뒤에는 stash가 여전히 스택에 남아있다는 것을 기억하고, 원한다면 직접 지웁니다.
git stash list        # 여전히 남아있는지 확인
git stash drop         # 확인 후 직접 제거
  1. 만약 충돌 해결 중 상황이 너무 꼬여서 원래 상태로 되돌리고 싶다면, git checkout -- 등으로 작업 디렉터리 변경을 되돌려도 stash 자체는 스택에 그대로 남아있으므로 다시 git stash pop이나 git stash apply를 시도할 수 있습니다 — 즉 이 과정에서 실수해도 stash 내용 자체가 유실되지는 않습니다.
  2. 애초에 충돌이 걱정된다면 pop 대신 git stash apply를 먼저 씁니다 — apply는 성공하든 실패하든 stash 항목을 스택에서 절대 지우지 않으므로, 결과를 확인한 뒤 직접 git stash drop으로 지울지 결정할 수 있어 더 보수적입니다.

공식 문서

마지막 수정

좋아요북마크

댓글0

아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.