git stash pop에서 충돌 났을 때 stash가 사라질까 봐 불안했던 이유
문제 발생
작업 중이던 변경사항을 git stash로 잠시 치워두고 다른 브랜치 작업을 하다가, 다시 git stash pop으로 복원하려는데 충돌이 발생했습니다. 이 상태에서 뭘 어떻게 해야 stash 내용을 잃지 않는지 확신이 없어 불안했습니다.
원인 분석
git stash pop은 내부적으로 두 단계입니다 — (1) stash 내용을 현재 작업 디렉터리에 적용(apply)하고, (2) 성공하면 그 stash 항목을 스택에서 제거(drop)합니다. 충돌이 발생하면 이 중 2단계가 실행되지 않습니다 — Git은 안전을 위해 적용이 완전히 성공적으로 끝나지 않은 stash를 지우지 않습니다.
즉 pop 도중 충돌이 나도 stash 항목은 스택에 그대로 남아 있습니다. 이 사실을 모르면 "충돌을 잘못 처리하면 작업 내용이 통째로 사라지는 것 아닐까"라는 불필요한 공포 속에서 충돌을 해결하게 됩니다.
해결 방안
- 충돌이 나도 침착하게 일반 merge 충돌과 똑같이 해결합니다 — 충돌 마커(
<<<<<<</=======/>>>>>>>)를 정리하고git add로 해결된 파일을 표시합니다. - 충돌 해결을 마친 뒤에는 stash가 여전히 스택에 남아있다는 것을 기억하고, 원한다면 직접 지웁니다.
git stash list # 여전히 남아있는지 확인
git stash drop # 확인 후 직접 제거- 만약 충돌 해결 중 상황이 너무 꼬여서 원래 상태로 되돌리고 싶다면,
git checkout --등으로 작업 디렉터리 변경을 되돌려도 stash 자체는 스택에 그대로 남아있으므로 다시git stash pop이나git stash apply를 시도할 수 있습니다 — 즉 이 과정에서 실수해도 stash 내용 자체가 유실되지는 않습니다. - 애초에 충돌이 걱정된다면
pop대신git stash apply를 먼저 씁니다 —apply는 성공하든 실패하든 stash 항목을 스택에서 절대 지우지 않으므로, 결과를 확인한 뒤 직접git stash drop으로 지울지 결정할 수 있어 더 보수적입니다.
댓글0
댓글을 남기려면 로그인이 필요해요. 로그인
아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.