[멋사 프론트엔드 부트캠프 14기] git add /git restore, git rm --cached의 차이

2025. 4. 24. 20:42·멋쟁이사자처럼/Git | Github

 💡Git 명령어를 사용할 때 비슷해 보여도 동작 방식에 차이가 있는 경우가 많다.
     오늘은 git add / git restore, git rm --cached의 차이를 정리했다.

 

🔎git add . vs git add *

명령어 의미 하위 폴더 숨김 파일
git add . 현재 디렉터리와 하위 모든 파일 추가 ✅ 포함 ✅ 포함
git add * 현재 디렉터리의 보이는 파일만 추가 ❌ 미포함 ❌ 미포함

📒정리

  • git add . : 대부분의 경우 더 안전하고 확실하다.
  • git add * : 셸에 따라 확장 방식이 달라서 예상과 다르게 동작할 수 있다.
  • ex) *.log를 무시하도록 설정했어도 git add *는 셸 확장 후 적용되므로 무시되지 않을 수 있다.
  • 예외 케이스
  • git add *도 */* 패턴으로 사용하면 하위 폴더의 보이는 파일을 추가할 수 있지만, 이 역시 셸 의존적이다.
  • 숨김 파일은 명시적으로 git add .[^.]* 같은 패턴으로 추가해야 한다.

🔎rm --cached vs restore

rm --cached는 커밋된 것 중에서 추적 피하고 싶은 파일이 있을 때 사용하는 것!

그럼 그 추적 피하고 싶은 파일은 어느 영역에 있는 것인가...staging?

 

한 번 정리해보자!

| git rm --cached

  • 조건: 반드시 Repository에 커밋된 기록이 있는 파일
  • 동작:
    • Staging Area에서 파일 제거 (Untracked 상태로 변경)
    • Working Directory의 파일은 그대로 유지
    • 다음 커밋 시 Repository에서 해당 파일 삭제 기록 생성
  • 사용 예: .gitignore에 추가해야 할 파일을 실수로 커밋한 경우

| git restore --staged

  • 조건: Staging Area에 추가된 변경사항이 있을 때
  • 동작:
    • Staging Area의 변경사항만 취소 (이전 커밋 상태로 되돌림)
    • Working Directory의 수정 내용은 보존
  • 사용 예: git add 후 변경사항을 다시 수정해야 할 때

 

| 파일 추적 상태 흐름

(파일 수정) →  Working Directory → (Git이 추적하길 바라는 파일) → Staging Area → (Commit) → Repository

  • rm --cached는 화살표를 역으로 가는 것이 아니라, Staging Area에서 Repository로의 연결을 끊는 행위인 것이다.
  • 수정된 파일 취소는 git restore <file>로 Working Directory → Staging Area 방향으로 진행됩니다.

📒정리

git rm --cached <file>      # Repository에 기록된 파일을 추적 중단 (Staging Area에서 삭제)
git restore --staged <file>  # Staging Area의 변경사항 취소 (Working Directory 보존)
git restore <file>           # Working Directory의 변경사항 취소 (이전 커밋 상태로 복원)

🔎 git restore . 은 되는데 git rm --cached . 은 왜 안될까?

🔹 git restore .

  • 수정 사항을 마지막 커밋 상태로 되돌림
  • .는 현재 디렉터리이므로, 하위 폴더까지 재귀적으로 작동 (Git이 내부적으로 -r 옵션을 기본 적용하기 때문)

    ≫ 잘 작동 됨.


🔹 git rm --cached .

  • Git 추적 대상에서만 파일을 제거 (--cached / 로컬 파일은 유지)
  • 하지만 .은 디렉터리이고, 실수로 디렉터리 전체를 삭제하는 것을 방지하기 위해 Git은 재귀 옵션(-r) 없이는 삭제를 거부

    ≫ 에러 발생!

fatal: not removing '.' recursively without -r

 

✅ 해결 방법

git rm --cached -r .
  • -r 옵션을 붙이면 하위 폴더까지 재귀적으로 제거 가능 (추적 중인 모든 파일 제거)
  • 주로 .gitignore에 추가된 파일을 Git 추적에서 제거할 때 사용

🧠 기억할 것

  • git add . 은 하위 폴더 포함 전체 파일 추가 / git add * 은 현재 폴더 파일만 추가
  • git rm --cached는 기본적으로 "이 파일을 앞으로는 버전 관리하지 않겠다"는 선언인 반면, restore 계열 명령은 "내가 한 변경을 취소하겠다"는 개념으로 이해하면 될 것 같다!
  • git restore . 은 변경사항 완전히 되돌리기!
  • git rm --cached 로 디렉터리 전체의 Git 추적을 끊을 때는 -r 옵션 필요!

'멋쟁이사자처럼 > Git | Github' 카테고리의 다른 글

[멋사 프론트엔드 부트캠프 14기] Git 작업할 때, 주의해야 할 것은??  (0) 2025.05.13
[멋사 프론트엔드 부트캠프 14기] .gitignore  (0) 2025.04.24
[멋사 프론트엔드 부트캠프 14기] Git과 Github  (2) 2025.04.24
'멋쟁이사자처럼/Git | Github' 카테고리의 다른 글
  • [멋사 프론트엔드 부트캠프 14기] Git 작업할 때, 주의해야 할 것은??
  • [멋사 프론트엔드 부트캠프 14기] .gitignore
  • [멋사 프론트엔드 부트캠프 14기] Git과 Github
JeonLay
JeonLay
하면 된다, 안되는 건 없다!
  • JeonLay
    개발자의 작은 실험실🧪
    JeonLay
  • 전체
    오늘
    어제
    • Today I Learned (20)
      • QA (1)
      • Front-end (1)
      • 멋쟁이사자처럼 (16)
        • 웹 표준 (1)
        • Markdown (1)
        • HTML (2)
        • CSS (1)
        • JavaScript (3)
        • Emmet (1)
        • CLI (1)
        • Git | Github (4)
        • NPM | live-server (1)
        • Node.js (1)
      • 코딩테스트 (1)
  • 최근 글

  • 인기 글

  • 태그

    systaxprofiles
    CodeSignal
    headings map
    마크다운 문법 정리
    멋사
    CSS
    자바스크립트
    함수
    웹 접근성
    프론트엔드
    문서 계층 구조
    버그트래킹시스템
    rm --cached
    javascript 엔진
    웹 표준 기술
    화살표 함수 표현식
    멋쟁이사자처럼
    outline algorithm
    14기
    javascript의 역사
    부트캠프
    멋쟁이사자처럼후기
    멋쟁이사자처럼후기자 #자바스크립트
    javascript
    javascript 실행 환경
    Web
    HTML
    frontend
    공부
    git
  • hELLO· Designed By정상우.v4.10.3
JeonLay
[멋사 프론트엔드 부트캠프 14기] git add /git restore, git rm --cached의 차이
상단으로

티스토리툴바