깃을 다루는 개발 프로젝트 폴더는 기본적으로 아래와 같은 구조로 구성되어있다.

folder안에 소스파일들이 있고 .git으로 소스파일들의 버젼관리를 할 수있다.

① git add . : working directory 에서 staging area로 폴더들이 이동한다.
② 파일 내용 수정 : 파일이 수정이 되었다면 staging area에서 working directory로 돌아온다. 이 파일들은 git이 tracking하고 있기 떄문에 tracked로 이동한다(index안에 있다라는 표현을 쓰기도 한다)
③ git add . : 다시 working directory 에서 staging area로 올린다.
④ git commit -m “commit 1” : staging area에 있는 파일들의 전체적인 상태를 깃은 사진 찍듯이 저장하고 “commit 1”이라는 사진폴더를 만들어 상태를 저장한다. 이를 커밋이라고 한다. 프로젝트의 진행에 따라 앞으로 파일들의 내용이 업데이트 되는데 매번 commit을 하여 그때 그때의 프로젝트 상태를 저장해 놓게 된다. 나중에 이전 프로젝트로 돌아가야할 일이 생기면 해당 commit통해 과거로 이동할 수 있다.
| 삭제 방식 | cli 명령어(window기준) | |
|---|---|---|
| 1 | 폴더안에는 파일이 유지되고 git기록에는 삭제 시키는 법 | git rm —cached * |
| 2 | 폴더안에 파일은 삭제시키고 git 기록에는 유지시키는법 | git rm —cached * |
| 3 | 둘 다 삭제하는법 | git rm * |
git 의 ‘rm’명령어에 ‘—cached’라는 옵션이 붙었다. 폴더안에 실제 파일은 지우지 않지만, git은 더이상 해당 파일들을 tracking하지 않게된다(unstage and remove paths oly from index). 이때 terminal에 changes to be commited라는 란이 뜨고 초록색 글씨로 deleted : a.txt라고 나오는데 이 뜻은 “네가 이 파일들 다 지운다고 나에게 명령 했는데, 아직 git의 기록에서 싸그리 몽땅 지운 건 아니다. 근데 별다른 변동사항없이 이대로 다음 커밋을 진행하게 되면 그땐 진짜로 a.txt를 지운다”라는 의미이다.

deleted: a.txt가 changes not staged for commit 에서 빨간색으로 뜨게 된다. 이 말은 즉슨, ‘파일은 폴더에서 지웠지만 git에 있는 것 까지 지우라는 명령은 받지 않았기 때문에 다음 커밋에 반영하지 않습니다. ‘ 라는 뜻이다. 그리고 이대로 커밋하는건 안된다. git add 아니면 git restore 을명령 해줘야 한다. 전자는 ‘deleted : a.txt라는 명령을 changed to be commited로 옮겨, 다음 커밋에 이를 반영해 파일들을 지우겠습니다’ 라는 내용이고 후자는 ‘아뇨 안지웁니다 폴더에 파일 다시 원상복구 하겠습니다. 다 없던 일로 합니다’ 이다.

‘폴더에도 지우고, git에서도 지우라는 명령을 받았습니다 다음 커밋시 별다른 추가 명령이 없다면 싹다 지우겠습니다 ‘라는 뜻. 걍 커밋 해버리면 다 지워지는 거고, 지우기 싫다면 git restore —staged a.txt로 delete명령을 changes not staged for commit 으로 보낼 수 있다. git restore a.txt 을 한번 더 입력하면 모두 없던 일로 돌아온다.

2.에서 짤막짤막하게 원상복구하는 명령어를 언급했었다. 깃의 상태를 보여주는 그림과 함께 보면서 이해해보자.
→ git restore —staged *

→ git restore a.txt

→ git restore —staged *
→ git restore *


이런 방법으로도 복구가 가능하다
git ls-files -d : 삭제된 파일리스트 확인하기
git checkout [files] : [files]부분에 삭제된 파일 이름을 써주면 복구 가능