TechFeedTechFeed
개발자 작업환경

로컬 변경 덮어쓰기, git stash, 머지 | 당기기 전에 작업 트리가 막히면?

로컬 변경이 들어오려는 커밋과 같은 파일을 건드리면 깃이 머지를 멈추고 overwritten by merge를 냅니다. 남길 일은 stash 뒤에 pull --ff-only, 그다음 pop 입니다. 버릴 파일만 restore 합니다. 갈라진 브랜치 질문과는 문장이 다릅니다. Git, stash, 작업 트리, 한국 1인 개발. 2026년 10월 문서.

by

Your local changes to the following files would be overwritten by merge는 커밋하지 않은 수정이, 들어오려는 커밋과 같은 파일을 건드릴 때 깃이 당기기를 멈추는 문장입니다. 합치는 방법을 묻는 줄이 아닙니다.

stash 없이 pull만 반복하면 같은 파일 목록이 다시 나옵니다. 1인으로 메인에 직접 고치다 원격 커밋을 받으면, 한국 저녁 작업 트리가 이 문장에서 멈춥니다. 파일 목록을 status와 나란히 본 다음 순서를 고르세요.


남길 수정은 git stash push로 잠시 치우고 당긴 뒤 pop 합니다. 버릴 파일만 git restore로 되돌리세요. 근거는 git stash입니다.


덮어쓰기 문장이면 커밋 전이다

작업 트리의 수정이 들어올 커밋과 같은 경로를 가리킵니다.


깃은 그 수정을 원격 내용으로 덮어쓰지 않으려고 머지를 중단합니다. 문장 아래에 파일 경로가 나열되고, Please commit your changes or stash them before you merge.가 따라옵니다. Aborting으로 끝나므로, 당기기는 아직 적용되지 않았습니다. 다시 pull 하기 전에 목록의 파일을 처리하면 됩니다.


git status --short와 git diff --name-only로 내 수정 목록을 확인하세요. 에러에 찍힌 파일만 겹친 것입니다. 다른 파일의 수정은 이 문장의 원인이 아닙니다. 전부 stash 할 필요는 없고, 겹친 경로만 치워도 머지가 진행됩니다. 실무에서는 목록이 짧으면 통째로 치우는 편이 실수가 적습니다.


브랜치 이력이 갈라져 합치는 방법을 묻는 문장은 divergent branches입니다. 그 문장에는 파일 목록이 없고, rebase와 merge 중 하나를 고르라고 합니다. 이 글은 파일 목록이 있는 덮어쓰기 문장만 봅니다.


책상 위에서 겹쳐 쌓인 서류철 두 묶음. 로컬 수정과 들어올 커밋이 같은 파일을 가리키는 장면
두 묶음이 같은 파일을 가리키면 깃은 당기기를 멈춘다

남길 때는 스태시 순서

치우고, 당기고, 다시 얹는 세 단계입니다.


순서명령결과
1git status --short겹친 파일 확인
2git stash push -m "wip"추적 중인 수정을 잠깐 치움
3git pull --ff-only빨리 감기만 당김
4git stash pop수정 복구. 겹치면 충돌 표시

커밋으로 남겨도 됩니다. git add 후 짧은 커밋을 만들고 git pull --ff-only를 합니다. 커밋을 만들기 싫을 때만 stash를 씁니다. 둘 다 작업 트리를 깨끗하게 만든 뒤에 당긴다는 점은 같습니다.


3번에서 갈라진 브랜치 문장이 나오면 멈춥니다. stash는 이미 치워진 상태이니, 합치는 방법은 그 글의 ff, rebase, merge 중에서 고르고 나서 pop 합니다. 이 글의 명령에 rebase 옵션을 섞지 마세요.


남길 수정을 치우고 당기기
git status --short git diff --name-only git stash push -m "wip before pull" git pull --ff-only git stash pop

버릴 파일만 되돌리기

그 경로의 커밋 안 된 수정만 사라집니다.


실험으로 고친 파일이 원격과 같아서 버려도 되면 git restore -- 경로입니다. 깃 2.23 이전은 git checkout -- 경로가 같은 역할입니다. checkout을 브랜치 이동과 한 줄에 섞지 마세요. 경로를 적지 않으면 다른 동작이 됩니다.


에러에 나온 파일만 되돌리세요. 옆에서 고치던 설정 파일까지 한 번에 지우면 저녁 작업이 사라집니다. git status로 남은 수정이 있는지 본 뒤에 pull 합니다. 작업 트리가 깨끗하면 덮어쓰기 문장은 더 이상 안 나옵니다.


저장소 전체를 마지막 커밋으로 되돌리는 명령은 이 문장의 첫 수가 아닙니다. 버린 수정은 stash와 달리 reflog에 작업 트리 내용이 잘 안 남습니다. 확신이 없으면 stash가 안전합니다.


한 파일만 버리기
git restore -- app/page.js git status --short git pull --ff-only

추적 안 된 파일은 문장이 다릅니다 | untracked working tree file would be overwritten 이면 git stash push -u로 그 파일까지 치웁니다. -a는 무시 목록까지 넣으므로 쓰지 마세요.


콘크리트 책상 위의 닫힌 노트북과 빈 노트. 당기기 전에 작업 트리를 비우는 장면
노트를 잠시 치운 뒤에야 원격 커밋이 들어온다

팝 다음에 충돌이 나면

같은 줄을 양쪽이 고쳤으면 pop이 충돌 표시를 남깁니다.


성공한 pop은 스태시 항목을 지웁니다. 충돌이 나면 항목은 남아 있습니다. 파일을 고치고 git add로 표시한 뒤에, 내용이 작업 트리에 있는 것을 확인하고 나서 git stash drop을 합니다. 충돌 중에 drop 하면 치워 둔 수정까지 목록에서 사라질 수 있습니다.


충돌 표식은 파일 안에 남습니다. 원격이 넣은 블록과 내가 치워 둔 블록을 읽고 하나만 남기세요. 표식을 그대로 커밋하면 다음 빌드가 문법에서 죽습니다. 표식을 지운 뒤 git diff로 남길 줄만 보세요.


HEAD가 브랜치가 아닌 상태였다면 먼저 분리된 헤드에서 이름을 붙인 다음 이 순서를 타세요. 분리된 자리에서 stash pop 까지 하면, 복구된 수정이 또 이름 없는 커밋으로 새기 쉽습니다.


갈라진 브랜치 문장과 가르기

파일 목록이 있으면 작업 트리, 없으면 이력입니다.


한 번의 pull에서 덮어쓰기가 먼저 나오고, stash 뒤에 다시 당기면 갈라진 브랜치가 나올 수 있습니다. 두 문장을 한 설정으로 고치지 마세요. 첫 문장은 커밋 안 된 파일이고, 둘째 문장은 로컬 커밋과 원격 커밋이 서로 앞에 있지 않은 상태입니다.


디스크가 가득 차 stash 쓰기가 거절되면 ENOSPC입니다. 그때는 스태시 순서를 반복하지 말고 공간을 비운 뒤에 다시 push 합니다. 포트가 막혀 앱이 안 뜨는 줄과는 로그가 다릅니다.


저녁에 본선에서 바로 고치다 원격의 새 기록이 들어오면, 같은 파일을 양쪽이 만진 채로 당기기가 멈춥니다. 멈추었다는 것은 아직 원격 내용이 파일에 덮이지 않았다는 뜻입니다. 그래서 목록을 읽고, 남길 수정과 버릴 수정을 나눈 뒤에 다시 당기면 됩니다. 남길 수정은 잠시 치웠다가 당긴 다음 되돌리고, 실험으로 어질러 둔 파일만 원래 기록으로 되돌립니다.


치운 뒤 다시 당겼더니 이번엔 이력이 갈라졌다고 물으면, 그 질문은 파일 수정이 아니라 양쪽 커밋의 순서입니다. 한 설정으로 두 문장을 같이 지우려고 하지 마세요. 작업 트리가 깨끗한지 상태 짧은 목록으로 보고, 그 다음에 빨리 감기만 허용하는 당기기를 합니다. 되돌린 수정이 같은 줄을 건드리면 충돌 표식이 파일에 남습니다. 표식을 지우고 남길 줄만 확인한 뒤에 기록을 남기세요.


문장가로막힌 것먼저
overwritten by merge커밋 안 된 수정stash 또는 restore
untracked working tree file추적 안 된 파일stash push -u
divergent branches커밋 이력이 갈라짐ff, rebase, merge
HEAD detached브랜치 밖에 섬switch -c

참고 자료

  • git stash | push, pop, 충돌 시 항목이 남는 동작, -u 와 -a
  • git merge | 커밋하지 않은 변경이 겹치면 머지를 중단
  • git restore | 작업 트리의 한 경로를 되돌림
  • git status | 수정과 추적 안 된 파일
  • git pull | --ff-only 는 빨리 감기만 허용

내부 연계: 갈라진 pull, 분리된 헤드, 디스크가 가득 찰 때.


인용한 문장과 명령은 2026년 10월 git 공식 문서 기준입니다.


자주 묻는 질문

pull을 여러 번 해도 같은 파일 목록입니다.

머지가 중단된 상태라 원격 내용은 아직 안 들어왔습니다. 목록의 파일을 stash하거나 restore 한 뒤에 다시 pull 하세요.


stash와 커밋 중 무엇을 먼저 하나요?

이력을 남기고 싶으면 짧은 커밋 뒤에 pull --ff-only 입니다. 커밋을 만들기 싫으면 stash push 뒤에 당기고 pop 합니다. 둘 다 작업 트리를 비운 다음 당깁니다.


stash pop이 충돌입니다. 항목이 지워졌나요?

충돌이 나면 스태시 항목은 남아 있습니다. 파일의 충돌 표식을 고치고 add 한 뒤에, 수정이 작업 트리에 들어온 다음 drop 하세요.


추적 안 된 새 파일도 같이 막힙니다.

문장이 untracked working tree file이면 git stash push -u 입니다. -a는 무시된 폴더까지 넣으므로 쓰지 마세요. .env가 무시 목록에 있으면 -u에 들어가지 않습니다.


갈라진 브랜치 설정으로 이 문장도 없어지나요?

pull.rebase 같은 설정은 이력 합치기입니다. 커밋 안 된 파일이 겹치면 그 설정보다 덮어쓰기 중단이 먼저입니다. 작업 트리를 치운 뒤에야 이력 설정을 탑니다.


restore와 checkout -- 는 같은가요?

한 경로의 작업 트리 수정을 버리는 용도는 같습니다. 2.23 이후라면 restore -- 경로가 그 역할만 합니다. 경로 없는 checkout은 브랜치 이동이라 분리된 헤드로 갈 수 있습니다.


이 문장은 커밋하지 않은 수정이 들어올 커밋과 같은 파일을 가리킨다는 뜻입니다. 남길 일은 git stash push 뒤에 git pull --ff-only, 그다음 pop 입니다. 버릴 파일만 git restore 하세요. 관련 글: 갈라진 pull, 분리된 헤드.


git stash머지작업 트리pullrestore덮어쓰기깃작업환경

함께 보면 좋은 문제 해결

EXPLORE / 개발자 작업환경

이어서 읽어보기

전체 토픽 둘러보기 →