Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

git rm 완벽 가이드: 깃 저장소에서 파일을 제거하는 모든 방법

git rm 명령어는 깃(Git) 저장소에서 파일을 제거합니다. 이 명령어는 파일 시스템에서 파일을 삭제한 뒤, 깃 저장소가 추적하는 파일 목록에서도 해당 파일을 제거합니다. –cached 옵션을 사용하면 파일 시스템에는 파일을 남겨둔 채 깃 저장소에서만 삭제할 수 있습니다.

깃 저장소에서 파일을 제거하려면 어떻게 해야 할까요? 모든 파일을 영원히 저장소에 담아두고 싶지는 않을 때가 많습니다. 프로젝트에 더 이상 필요 없는 파일이 생기면 깃 저장소에서 제거하고 싶어지겠죠.

깃 저장소에서 파일을 제거하려면 git rm 명령어를 사용하면 됩니다. 파일을 추가하는 git add 명령어와 정반대 역할로, 파일을 제거해 주는 명령어입니다.

이 가이드에서는 git rm 명령어의 사용법을 살펴보고, 실제 예시를 통해 동작 방식까지 자세히 알아보겠습니다. 그럼 시작해 볼까요?

깃에서 파일이 관리되는 방식

git rm 명령어 사용법을 익히기 전에, 먼저 깃 버전 관리 시스템에서 파일이 어떻게 관리되는지 이해할 필요가 있습니다.

깃 저장소 내의 파일은 크게 두 가지 상태로 구분됩니다: 추적(tracked) 파일비추적(untracked) 파일입니다.

추적 파일은 깃 커밋에 포함된 파일입니다. 비추적 파일은 아직 저장소에 커밋되지 않은 파일로, 보통 커밋을 생성하기 전에 새로 만든 파일들이 여기에 해당합니다.

파일을 깃 커밋에 추가하려면 git add 명령어를 사용하세요. 그러면 해당 파일은 추적 파일이 됩니다. 반대로 파일 추적을 중단하고 싶다면 git rm 명령어를 사용하면 됩니다.

git rm 명령어는 하나 또는 여러 개의 파일을 깃 저장소에서 제거합니다. 기본 설정에서는 파일이 로컬 머신과 깃 저장소 양쪽에서 모두 삭제됩니다. 로컬에 파일을 보존하고 싶다면 –cached 옵션을 사용하세요.

옵션 없이 실행하면 이 명령어는 깃 저장소와 로컬 작업 디렉터리 양쪽에서 파일을 제거합니다. 즉, 리눅스의 rm 명령어가 컴퓨터에서 파일을 삭제하듯 실제로 파일을 지우는 것과 같습니다.

단일 파일 제거하기

이 명령어의 가장 기본적인 용도는 파일 하나를 제거하는 것입니다. settings.json이라는 파일을 깃 저장소에서 제거해 보겠습니다:

git rm settings.json

이 명령은 저장소의 추적 영역에서 settings.json을 제거합니다.

여러 파일 한 번에 제거하기

같은 명령으로 여러 파일을 한꺼번에 제거할 수도 있습니다. 제거하려는 파일이나 폴더 이름을 공백으로 구분하여 나열하면 됩니다:

git rm settings.json .env

이렇게 하면 settings.json과 .env 파일이 저장소에서 함께 제거됩니다.

기본적으로 깃은 rm 명령으로 경로를 스테이징 해제하고 제거할 때 안전 검사를 수행합니다. 현재 브랜치의 파일이 스테이징 인덱스의 파일과 일치하는지 확인하는 절차입니다. -f(--force) 옵션을 사용하면 이 검사를 건너뛸 수 있습니다:

git rm -f settings.json

-f 옵션은 파일을 정말로 제거하겠다고 확신할 때만 사용해야 합니다. 무분별하게 사용하면 나중에 병합 충돌(merge conflict)이 발생할 수 있습니다. 충돌이 발생했다면 병합 충돌 해결 가이드를 참고해 해결하시길 바랍니다.

git rm --cached: 로컬 파일은 유지하면서 저장소에서만 제거하기

git rm --cached 옵션은 스테이징 영역(staging area)에서만 파일을 제거합니다. 작업 디렉터리의 파일은 그대로 유지되므로 로컬 사본은 계속 남아 있습니다. 다만 파일은 깃 프로젝트를 추적하는 인덱스에서 제거됩니다.

settings.json 파일을 저장소의 추적 대상에서는 제거하되 프로젝트 디렉터리에는 유지해 보겠습니다:

git rm --cached settings.json

다음 커밋을 푸시하면 settings.json 파일이 저장소에서 제거됩니다.

파일이 로컬 작업 디렉터리에 존재하는 한, git add 명령어로 언제든 다시 깃 저장소에 추가할 수 있습니다. git add에 대해 더 궁금하다면 git add 명령어 튜토리얼을 참고하세요.

git rm 명령어 되돌리는 방법

git rm 명령어는 커밋이 이루어지기 전까지는 스테이징 영역과 작업 디렉터리만 변경합니다. 따라서 이 명령은 언제든 되돌릴 수 있습니다. git rm을 취소하려면 git reset을 사용해 저장소를 마지막 커밋 상태로 되돌리면 됩니다:

git reset HEAD

HEAD는 저장소의 마지막 커밋을 가리키므로, 위 명령은 저장소를 마지막 커밋 상태로 되돌립니다.

이미 변경 사항을 커밋한 경우에도 git rm을 되돌릴 수 있습니다. 이때는 git reset 명령어에 되돌리고 싶은 커밋의 해시(hash)를 지정하면 됩니다:

git reset a7e3cce9637c74281e6590003b39d3990bbb2731

위 명령은 깃 저장소를 이전 커밋으로 되돌립니다. reset 뒤에 붙는 긴 문자열이 바로 마지막 커밋의 해시값입니다.

저장소를 되돌리면 커밋 이전의 상태를 그대로 확인할 수 있으며, 파일은 여전히 스테이징된 상태로 유지됩니다. 즉, git rm 명령이 성공적으로 취소된 것입니다.

git rm vs rm: 무엇이 다를까?

git rm 명령어는 작업 머신과 깃 저장소 양쪽에서 파일을 제거합니다. 반면 리눅스의 rm 명령어는 깃 저장소에서 파일을 제거하지 않습니다.

깃 저장소에서 파일을 제거하려면 반드시 git rm을 사용해야 합니다. git rm은 깃 저장소에서 파일을 제거하라는 명령을 실행하기 때문입니다. 리눅스 시스템의 모든 파일이 깃 저장소에 있는 것은 아니므로, 리눅스의 rm 명령어는 깃 저장소의 추적 목록에서 파일을 빼주지 못합니다.

마무리

git rm 명령어를 사용하면 깃 저장소와 작업 디렉터리에서 파일을 손쉽게 제거할 수 있습니다. 깃 저장소에서만 파일을 제거하고 로컬 파일은 그대로 두고 싶다면 –cached 옵션을 활용하세요.

이제 여러분도 명령줄 전문가처럼 git rm 명령어를 자유롭게 사용할 준비가 되었습니다!

깃을 더 깊이 배우고 싶다면 깃 학습 가이드를 확인해 보시길 추천합니다.