git rm
Git을 시작할 때 "Git에 더 이상 파일(또는 파일들)을 추적하지 않도록 지시하려면 어떻게 해야 합니까?"라는 질문을 자주 받습니다. git rm
명령은 Git 리포지토리에서 파일을 제거하는 데 사용됩니다. git add 명령의 정반대라고 생각하면 됩니다.
Git rm 개요
git rm
명령을 사용하여 개별 파일 또는 파일 모음을 제거할 수 있습니다. git rm
의 주요 기능은 Git 색인에서 추적된 파일을 제거하는 것입니다. 또한, git rm
을 사용하여 스테이징 색인과 작업 디렉터리에서 파일을 제거할 수 있습니다. 작업 디렉터리에서만 파일을 제거하는 옵션은 없습니다. 작업 중인 파일은 현재 HEAD
에 있는 파일과 동일해야 합니다. 파일의 HEAD
버전과 스테이징 색인 또는 작업 트리 버전 사이에 불일치가 있는 경우 Git은 제거를 차단합니다. 이러한 차단 기능은 진행 중인 변경 사항이 제거되지 않도록 하는 안전 메커니즘입니다.
참고로 git rm
은 브랜치를 제거하지 않습니다. git 브랜치 사용에 대해 자세히 알아보세요
사용
<file>…
제거할 대상 파일을 지정합니다. 옵션 값은 개별 파일, 공백으로 구분된 파일 목록 file1 file2 file3
또는 와일드카드 파일 glob (~./directory/*)
입니다.
-f
--force
-f
옵션은 Git에서 수행하는 안전 검사를 재정의하여 HEAD
에 있는 파일이 스테이징 색인 및 작업 디렉터리의 현재 콘텐츠와 일치하는지 확인하는 데 사용됩니다.
관련 자료
Git 치트 시트
솔루션 보기
Bitbucket Cloud에서 Git에 대해 알아보기
-n
--dry-run
"시험 실행(dry run)" 옵션은 git rm
명령을 실행하는 보호 장치지만 실제로 파일을 삭제하지는 않습니다. 대신 제거할 파일을 출력합니다.
-r
-r
옵션은 '재귀'의 줄임말입니다. 재귀 모드로 작업할 때 git rm
은 대상 디렉터리와 해당 디렉터리의 모든 콘텐츠를 제거합니다.
--
구분자 옵션은 파일 이름 목록과 git rm
에 전달되는 인수를 명시적으로 구분하는 데 사용됩니다. 이 기능은 일부 파일 이름에 다른 옵션과 혼동될 수 있는 구문이 있는 경우에 유용합니다.
--cached
cached 옵션은 스테이징 색인에서만 제거되도록 지정합니다. 작업 디렉터리 파일은 그대로 남습니다.
--ignore-unmatch
따라서 일치하는 파일이 없더라도 명령이 0 sigterm 상태로 종료됩니다. 이것은 Unix 수준 상태 코드입니다. 코드 0은 명령이 성공적으로 호출되었음을 나타냅니다. --ignore-unmatch
옵션은 안정적으로 종료해야 하는 더 큰 셸 스크립트의 일부로 git rm
을 사용할 때 유용할 수 있습니다.
-q
--quiet
quiet 옵션은 git rm
명령의 출력을 숨깁니다. 명령은 보통 제거된 각 파일에 대해 한 줄을 출력합니다.
git rm을 실행 취소하는 방법
git rm
실행은 영구적인 업데이트가 아닙니다. 이 명령은 스테이징 색인과 작업 디렉터리를 업데이트합니다. 새 커밋이 만들어지고 변경 사항이 커밋 기록에 추가되기 전까지 이 변경 사항은 지속되지 않습니다. 따라서 일반적인 Git 명령을 사용하여 이러한 변경 사항을 "실행 취소"할 수 있습니다.
git reset HEAD
재설정하면 현재 스테이징 색인과 작업 디렉터리가 HEAD
커밋으로 되돌아갑니다. 그러면 git rm
이 실행 취소됩니다.
git checkout .
체크아웃도 같은 효과가 있으며 HEAD
에서 최신 버전의 파일을 복원합니다.
git rm
이 실행되고 제거를 유지하는 새 커밋이 만들어지면, git reflog
를 사용하여 git rm
실행 이전의 참조를 찾을 수 있습니다. git reflog 사용에 대해 자세히 알아보세요.
토론
명령에 주어진<file>
인자는 정확한 경로, 와일드카드 파일 glob 패턴 또는 정확한 디렉터리 이름일 수 있습니다. 이 명령은 현재 Git 리포지토리에 커밋된 경로만 제거합니다.
와일드카드 파일 glob는 디렉터리 전체에서 일치합니다. 와일드카드 glob을 사용할 때는 주의해야 합니다. directory/*
및 directory*
의 예시를 고려해 보겠습니다. 첫 번째 예시에서는 directory/
의 모든 하위 파일을 제거하는 반면 두 번째 예시에서는 directory1
, directory2
, directory_whatever
과 같은 형제 디렉터리를 모두 제거하는데, 이는 예상치 못한 결과일 수 있습니다.
git rm의 범위
git rm
명령은 현재 브랜치에서만 작동합니다. 제거 이벤트는 작업 디렉터리와 스테이징 색인 트리에만 적용됩니다. 새 커밋이 만들어질 때까지는 파일 제거가 리포지토리 기록에 유지되지 않습니다.
rm 대신 git rm을 사용하는 이유
Git 리포지토리는 일반 셸 rm
명령이 추적 중인 파일에서 실행된 시점을 인식합니다. 제거를 반영하도록 작업 디렉터리를 업데이트합니다. 제거로 스테이징 색인을 업데이트하지는 않습니다. 스테이징 색인에 변경 사항을 추가하려면 제거된 파일 경로에서 git add
명령을 추가로 실행해야 합니다. git rm
명령은 바로 가기 역할을 하며, 작업 디렉터리와 스테이징 색인을 제거와 함께 업데이트합니다.
예제
git rm Documentation/\*.txt
이 예시에서는 와일드카드 파일 glob를 사용하여 Documentation
디렉터리 및 해당 하위 디렉터리의 하위인 *.txt files
를 모두 제거합니다.
이 예시에서는 별표(*)가 슬래시로 이스케이프됩니다. 이것은 셸이 와일드카드를 확장하지 못하게 하는 가드입니다. 그러면 와일드카드는 Documentation/
디렉터리에 있는 파일과 하위 디렉터리의 경로 이름을 확장합니다.
git rm -f git-*.sh
이 예시에서는 force 옵션을 사용하고 모든 와일드카드 git-*.sh
파일을 대상으로 합니다. force 옵션은 작업 디렉터리와 스테이징 색인 모두에서 대상 파일을 명시적으로 제거합니다.
더 이상 파일 시스템에 없는 파일을 제거하는 방법
위의 "rm
대신 git rm
을 사용하는 이유"에서 언급했듯이 git rm
은 실제로 표준 셸 rm
및 git add
를 결합한 편리한 명령으로, 작업 디렉터리에서 파일을 제거하고 해당 제거를 스테이징 색인으로 승격합니다. 표준 셸 rm
명령만 사용하여 여러 파일을 제거하면 리포지토리가 다루기 힘든 상태가 될 수 있습니다.
명시적으로 제거된 모든 파일을 다음 커밋의 일부로 기록하려는 경우 git commit -a
는 다음 커밋을 준비하기 위해 스테이징 색인에 모든 제거 이벤트를 추가합니다.
하지만 셸 rm
으로 제거된 파일을 영구적으로 제거하려는 경우 다음 명령을 사용합니다.
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
이 명령은 작업 디렉터리에서 제거된 파일 목록을 생성하고 해당 목록을 git rm --cached
로 파이프하여 스테이징 색인을 업데이트합니다.
Git rm 요약
git rm
은 두 가지 기본 Git 내부 상태 관리 트리(작업 디렉터리 및 스테이징 색인)에서 작동하는 명령입니다. git rm
은 Git 리포지토리에서 파일을 제거하는 데 사용됩니다. 기본 셸 rm
명령과 git add
명령의 효과를 결합하는 편리한 방법입니다. 즉, 먼저 파일 시스템에서 대상을 제거한 다음 해당 제거 이벤트를 스테이징 색인에 추가합니다. 이 명령은 Git에서 변경 사항을 실행 취소하는 데 사용할 수 있는 여러 명령 중 하나입니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.