로컬 변경이 들어오려는 커밋과 같은 파일을 건드리면 깃이 머지를 멈추고 overwritten by merge를 냅니다. 남길 일은 stash 뒤에 pull --ff-only, 그다음 pop 입니다. 버릴 파일만 restore 합니다. 갈라진 브랜치 질문과는 문장이 다릅니다. Git, stash, 작업 트리, 한국 1인 개발. 2026년 10월 문서.
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 중 하나를 고르라고 합니다. 이 글은 파일 목록이 있는 덮어쓰기 문장만 봅니다.
두 묶음이 같은 파일을 가리키면 깃은 당기기를 멈춘다
남길 때는 스태시 순서
치우고, 당기고, 다시 얹는 세 단계입니다.
순서
명령
결과
1
git status --short
겹친 파일 확인
2
git stash push -m "wip"
추적 중인 수정을 잠깐 치움
3
git pull --ff-only
빨리 감기만 당김
4
git 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 합니다. 포트가 막혀 앱이 안 뜨는 줄과는 로그가 다릅니다.
저녁에 본선에서 바로 고치다 원격의 새 기록이 들어오면, 같은 파일을 양쪽이 만진 채로 당기기가 멈춥니다. 멈추었다는 것은 아직 원격 내용이 파일에 덮이지 않았다는 뜻입니다. 그래서 목록을 읽고, 남길 수정과 버릴 수정을 나눈 뒤에 다시 당기면 됩니다. 남길 수정은 잠시 치웠다가 당긴 다음 되돌리고, 실험으로 어질러 둔 파일만 원래 기록으로 되돌립니다.
치운 뒤 다시 당겼더니 이번엔 이력이 갈라졌다고 물으면, 그 질문은 파일 수정이 아니라 양쪽 커밋의 순서입니다. 한 설정으로 두 문장을 같이 지우려고 하지 마세요. 작업 트리가 깨끗한지 상태 짧은 목록으로 보고, 그 다음에 빨리 감기만 허용하는 당기기를 합니다. 되돌린 수정이 같은 줄을 건드리면 충돌 표식이 파일에 남습니다. 표식을 지우고 남길 줄만 확인한 뒤에 기록을 남기세요.