Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Git에서 추적되지 않은 파일이 병합으로 덮어써진다면 먼저 보존하고 분류하세요

이 거부를 안전 경계로 보세요. 표시된 경로를 복사하고 상류 추적 상태와 로컬 무시 규칙을 확인한 뒤 제한적 삭제보다 가역적인 이동이나 stash를 먼저 선택합니다.

병합 게이트가 충돌하는 두 파일 경로를 멈추고 작업 밖에 보호 사본을 남긴 원본 일러스트.
원본 일러스트: 이 거부는 안전 경계입니다. 작업 트리를 바꾸기 전에 표시된 경로를 복사하세요. Watch at Ease

들어오는 브랜치가 추적하는 경로가 로컬 경로를 덮어쓸 때 Git은 merge, pull 또는 checkout을 중단합니다. 이 거부는 바이트를 보호할 뿐 로컬 파일이 버려도 된다는 뜻이나 만능 명령이 안전하다는 뜻이 아닙니다.

오류의 각 경로에 증거 장부를 만들고 작업 트리 밖에 원본을 보존한 뒤 현재 상태와 들어오는 트리의 소유를 분류해 이동, stash, 추적 추가 또는 제한적 clean을 선택합니다.

1. 작업을 멈추고 경로를 보존하세요

reset, checkout, clean, pull 또는 재merge 전에 전체 오류와 경로 목록을 복사합니다. git status --short --untracked-files=all, 현재 브랜치와 HEAD, 실패 명령과 통합 대상도 기록합니다.

각 경로를 작업 트리 밖으로 복사하고 중요한 파일은 모드와 체크섬도 기록합니다. 중첩 .git, 비밀, 생성물, 로컬 설정 또는 대체 불가능한 작업을 확인합니다.

2. 로컬 상태와 들어오는 소유를 증명하세요

저장소 최상위에서 git ls-files --error-unmatch, --others --exclude-standard, --ignored를 사용해 추적·미추적·무시를 구분합니다. git check-ignore -v는 규칙 출처를 보여줍니다.

fetch 후 git ls-tree -r --name-only <target> -- path로 대상 커밋의 소유를 확인합니다. 파일/디렉터리, 대소문자, sparse checkout, submodule, 중첩 저장소는 별도 경계입니다.

3. 되돌릴 수 있는 보존 경로를 선택하세요

가치 있는 로컬 전용 경로는 작업 트리 밖으로 옮기고 들어오는 파일을 받은 뒤 조정합니다. 추적해야 한다면 소유권과 비밀을 검토해 적절한 브랜치에서 commit하고 오류만 없애는 임시 commit은 피합니다.

일반 git stash는 미추적을 보장하지 않습니다. --include-untracked는 미추적을, --all은 ignored도 저장해 작업 트리에서 정리합니다. 내용을 확인하고 복원을 검증할 때까지 pop보다 apply를 사용합니다.

4. 버려도 된다고 증명된 경로만 clean하세요

정확한 pathspec으로 git clean -n부터 검토합니다. -d는 미추적 디렉터리, -x는 ignored도 포함, -X는 ignored만 삭제합니다. 범위가 달라 서로 바꿀 수 없습니다.

force와 중첩 저장소 보호는 데이터 분류가 아닙니다. dry-run이 익숙해 보인다는 이유로 git clean -fdx를 실행하지 말고 가치 있는 바이트를 먼저 보존합니다.

5. 원래 통합을 다시 실행하고 경계를 검증하세요

충돌 이름을 이동, stash 또는 의도적으로 제거한 뒤 원래 merge, pull, checkout을 한 번 재실행합니다. 예상 commit을 확인하고 로컬 내용을 하나씩 복원하며 검사 완료 전 백업을 지우지 않습니다.

Git 2.39.2 격리 픽스처에서 같은 경로의 로컬 미추적과 들어오는 추적이 충돌했고 merge는 멈추며 체크섬은 그대로였습니다. sparse checkout, 대소문자, submodule, Git LFS, IDE, CI, 비밀 관리는 재현하지 않았습니다.

가치 있는 파일, 무시·생성 파일, 들어오는 추적 경로를 병합 전에 분류한 원본 일러스트.
원본 일러스트: 경로를 분류하고 원본 바이트를 보존한 뒤 제한적 정리보다 가역 경로를 먼저 선택하세요. Watch at Ease